אביב-תשס"ז 236363 - DBMS, Design 1
BCNFצורה נורמלית – Boyce-Codd Normal Form
תלות פונקציונלית בקבוצת אטריביוטים מוטיבציה :שאיננה מהווה על-מפתח יוצרת כפילויות.
תהי הגדרה :R סכמה רלציונית, ותהי F קבוצת BCNFהיא ב- R. Rתלויות פונקציונליות מעל
אם לכל תלות פונקציונלית לא Fבהינתן הוא על-מפתח F+, X הנמצאת ב-X→Yטריוויאלית
.Rשל אם קיימת תלות לא טריוויאלית בקבוצת
אטריביוטים שאיננה על-מפתח, תכנון הסכמה הוא לקוי ובמסד הנתונים עלולות להיווצר כפילויות.
אביב-תשס"ז 236363 - DBMS, Design 2
?BCNFאיך נבדוק שהסכמה ב-
:על פי ההגדרה יש לחשב אתF+
עבור כלX→Y∈ F + יש לבדוק כיX.הינו על-מפתח
.Rהוא אקספוננציאלי בגודל של +F: הגודל של הבעיה
, כלומר BCNF איננה ב-R,F: אם סכמה רלציונית משפט, אזי BCNFשמפרה את תנאי ה- +X→Y∈ Fקיימת תלות.BCNFשמפרה את תנאי ה- Z→W∈ F קיימת תלות
למשל, עבורR(Cust_Id, Cust_Name,Room_Num) וקבוצת תלויות
F={Cust_Id→Cust_Name, Cust_Id→Room_Num, Room_Num→Cust_Id}
.BCNF נמצאת ב-R,F כדי להסיק כי Fמספיק לבדוק רק את התלויות ב-
אביב-תשס"ז 236363 - DBMS, Design 3
BCNFדוגמא –
בהינתן קבוצת התלויות הפונקציונליותדוגמה :
F={Cust_Id→Track,Track → Faculty}:BCNF איננה ב-Cust_Id, Track, Faculty, Book_Name(Rהסכמה (
-בF קיימת התלות →Faculty Track אך ,Track.אינו על-מפתח הסבר: ניתן להיעזר במשפט כדי לבדוק האםR,F-ב BCNF. כפילויות במסד: למשל, שם הפקולטהCS מופיע ברלציה פעמים
.CSרבות, כמספר הסטודנטים השייכים למסלולים של הפקולטה
פירוק ל-פתרון :BCNF פירוק של - R לתתי-סכמות כך שכל יחסית לתלויות הרלוונטיות לה BCNFאחת מהן נמצאת ב-
(הגדרה מדויקת תינתן בהמשך).
אביב-תשס"ז 236363 - DBMS, Design 4
פירוקים של סכמות
תהי הגדרה :R.סכמה רלציונית
כך ρ = {R1, …,Rn} הוא קבוצת סכמות Rפירוק של iש-
n=1 Ri = R ⋃.
:דרישות מהפירוק המסד המפורק חייב לבטא את אותו המידע (תכונת
שימור מידע). אם כל אחת מתתי-סכמות מספקת את התלויות
הרלוונטיות אליה, אז המסד המפורק מספק את כל (תכונת שימור תלויות).Fהתלויות הפונקציונאליות של
אביב-תשס"ז 236363 - DBMS, Design 5
שימור מידע
נדרוש שהפירוק לא יאבד אינטואיציה :אינפורמציה, ונוכל לקבל בחזרה בדיוק את המידע
שהיה לנו בטבלה המקורית ע"י צרוף תתי-הטבלאות.
אם הפירוק אינו משמר מידע, בדרך-כלל הצירוף ייתןרשומות מיותרות, שלא היו בטבלה המקורית.
כשמפרקים סכמה לתתי-סכמות, חיוני לדאוגלשימור מידע.
אביב-תשס"ז 236363 - DBMS, Design 6
שימור מידע
תהי הגדרה :R סכמה רלציונית, ותהי F קבוצת תלויות .R פירוק של ρ = {R1, …,Rn}פונקציונלית, ויהי
ρ משמר מידע בהינתן הואF אם לכל רלציה r מעל R המקיימת r ⊧ F :מתקיים ⋈i
n= 1 πRi
(r) = rדוגמה:
R(ID, NAME, ADDR), F = {ID → NAME, ID → ADDR}
הפירוק ρ = {R1(ID, NAME), R2(NAME, ADDR)} אינו משמרמידע.
נראה תוכן שלR שמקיים את התלויות אך מפר את התנאי של שימור מידע:
אביב-תשס"ז 236363 - DBMS, Design 7
דוגמה – המשך
לעומת זאת, הפירוק ρ’ = {R1’(ID, NAME), R2
’(ID, ADDR)}
⋈πR1’(r) πמשמר מידע: R2’(r) = r
IDNAMEADDR
ת"אראובן1
חיפהראובן2
NAMEADDR
ת"אראובן
חיפהראובן
IDNAME
ראובן1
ראובן2
IDNAMEADDR
ת"אראובן1
חיפהראובן1
ת"אראובן2
חיפהראובן2
r= πR1(r) πR2
(r)
πR1(r) π⋈ R2
(r)
אביב-תשס"ז 236363 - DBMS, Design 8
שימור מידע בפירוק לשתי סכמות
פירוק לשתי סכמות משפט :ρ = {R1, R2} הוא משמר מידע אם ורק אם
F (R⊧ 1 ∪ R2) → (R1 \ R2)
או
F (R⊧ 1 R∪ 2) → (R2 \ R1) בדוגמה האחרונה (עבור סכמהR(ID, NAME, ADDR):(
הפירוקρ = {R1(ID, NAME), R2(NAME, ADDR)} לא מקיים NAME→ ID וגם לא ,NAME → ADDR ולכן אינו משמר מידע לכל ,
.Rתוכן אפשרי של לעומת זאת, הפירוקρ = {R1(ID, NAME), R2(ID, ADDR)} כן מקיים
ולכן, לפי המשפט, כן משמר מידע.ID → NAME(למשל)
אביב-תשס"ז 236363 - DBMS, Design 9
BCNFפירוק ל-
תהי הגדרה :R סכמה רלציונית, תהי F קבוצת ρ = {R1,…, Rn}, ויהיRתלויות פונקציונליות מעל
אם כל BCNFפירוק ל- הוא R. ρפירוק של πRi בהינתן BCNF היא ב-Riתת-סכמה
F.תהי הגדרה :R סכמה רלציונית, תהי F קבוצת תלויות
על F של היטל. הS ⊆ R, ותהי Rפונקציונליות מעל
) הוא:πsF (סימון: Sתת-הסכמה πsF = {X → Y | X → Y F⊆ + X Y S}⋃ ⊆
יש לשים לב לכך שהתלויות בהיטל נלקחות מתוךF+ ולא רקF.
אביב-תשס"ז 236363 - DBMS, Design 10
- הרעיוןBCNFפירוק משמר מידע ל-
תמיד קיים פירוק ל-משפט :BCNF.שמשמר מידע -נמצא סכמה אשר אינה נמצאת בBCNF ונפרק אותה
לשתי תתי-סכמות על-פי המשפט לפירוק משמר מידע לשתי תתי-סכמות. בפרט,
בהינתן סכמהR ותלות פונקציונלית X → Y נוכל לפרק את ,R R1[X{לשתי תתי-סכמות: Y],R⋃ 2[R\(Y\X)]{ ,לפי המשפט .
מובטח שהפירוק משמר מידע. נחזור על השלב הקודם כל עוד קיימות סכמות אשר אינן
.BCNFנמצאות ב- הערה: כיוון שבכל צעד מבצעים פירוק משמר מידע
(לשתי תתי-סכמות) , מובטח כי הפירוק המתקבל הוא גם משמר מידע.
אביב-תשס"ז 236363 - DBMS, Design 11
- BCNFפירוק משמר מידע ל-האלגוריתם
תהיF:קבוצת תלויות פונקציונליות .1}R {ρ ←.
– עצור.BCNF הן ב-ρאם כל הסכמות ב- 2.
, כלומר שקיימת BCNFשאינה ב- ⊇S ρ מצא סכמה3.
Xכך ש- X→Y ∈ πsF תלות פונקציונלית Y S⋃ ⊆ , Y ⊈
X -ו X אינו על-מפתח של S .⋃ ρ (ρ \ {S}) {S\(Y\X)} {Xבצע: ⋃ ⋃ Y}
. 3חזור ל-•
אביב-תשס"ז 236363 - DBMS, Design 12
אלגוריתם יעיל למציאת כיסוי של πsF
האלגוריתם הפשוט לחישובπsF דורש חישוב שלF+. למציאת כיסוי של להלן אלגוריתםπsF מצריך אשר אינו
+F:חישוב של
Fs← ∅ for each X→Y∈F such that X⊆S do
Z ← (X+F ∪ S)\X
if Z ∅ then
Fs ← Fs ⋃ {X →Z} Return Fs
הערה: האלגוריתם אינו מחזיר אתπsF אלא כיסוי ,שלו (לאו דווקא מינימאלי).
אביב-תשס"ז 236363 - DBMS, Design 13
- דוגמהBCNFפירוק משמר מידע ל-
נתונה הסכמה דוגמה :R (ציונים של סטודנטים), וקבוצת :Fתלויות
R(snumber, sname, cnumber, cname, grade)
F = {snumber →sname, cnumber →
cname, (snumber, cnumber) → grade} Snumber -- מס' סטודנט Sname -- שם סטודנט Cnumber -- מס' קורס Cname -- שם קורס Grade -- ציון
אביב-תשס"ז 236363 - DBMS, Design 14
דוגמה - המשך
R(snumber, sname, cnumber, cname, grade)
R2(snumber, cnumber, cname, grade)
R4(cnumber, cname)R3(snumber, cnumber, grade)
R1(snumber, sname)
snumber → sname
cnumber → cname
פירוק בשלבים:• F = {snumber → sname, cnumber → cname, (snumber, cnumber) → grade}
הוא משמר מידע }R1,R3,R4{לפי הבנייה, הפירוק ל- •.BCNFוב-
אביב-תשס"ז 236363 - DBMS, Design 15
)1 – הערה(BCNFפירוק ל-
יש לשים לב כי בפירוק של סכמה רלציוניתR אנחנו ע"י כך שבודקים שכל BCNFבודקים אם הפירוק הוא ב-
πRi מעל BCNF היא ב-Riתת-סכמה F ההיטל מחושב)
).+Fמעל לבדוק האם לא מספיקRi-מקיימת את תנאי ה BCNF
.Riב- שמכילות תכונותFמעל קבוצת התלויות ב-
ניתן לעשות בדיקה עבורπRiF ע"י כך שקודם מחשבים
πRiכיסוי של F עם אלגוריתם יעיל ואז משתמשים
ישירות מהכיסוי.BCNFבמשפט המאפשר לבדוק שיוך ל-
אביב-תשס"ז 236363 - DBMS, Design 16
)2 – הערה(BCNFפירוק ל-
דוגמא:R=(A,B,C,D), → C, C→ D} F={B, ρ = {(A,B,D), (B,C)}:הפירוק איננו ב-טענה BCNF.:הסבר R1 BCNF∉ כי D ∈ πR1
F → B אולם Bאיננו R1על-מפתח של
אולם: אם היינו בודקים אתR1-מעל קבוצת התלויות ב F (אשר שווה לקבוצה ריקה), אזי היינו R1שמכילות תכונות ב-
R1מקבלים כי BCNF∈.(ההגדרה מתקיימת באופן ריק)
.ההערה רלוונטית לכל צורה נורמאלית
אביב-תשס"ז 236363 - DBMS, Design 17
בדיקת קיום שימור מידע
(מס' תתי-סכמות אלגוריתם כללי לבדיקת שימור מידע בפירוק נתוןכלשהו):
.R מעל הסכמה rצור רלציה 1. לכל תת-סכמהRi נקצה ברלציה r שורה אחת titi מקבלת את הערך a לכל עמודה A R⊆ i ואת הערך bi
.B∉Riלכל עמודה ,ti שתי שורות r שורה שכולה ללא אינדקסים, ויש ב-rכל עוד אין ב-•
tj -כך ש ti[X]=tj[X] עבור תלות פונקציונלית כלשהי )X → Y (⊆F ,, באופן הבא:ti[Y] וב-tj[Y]השווה את הערכים ב-
לכל עמודהA Y∈ אם אחד משני הערכים ,ti[A], tj[A] הוא a , ואחרת החלף a(ללא אינדקס), החלף את הערך האחר ב-
, כרצונך.tj[A] ב-ti[A] או את ti[A] ב-tj[A]את שורה שהיא rהפירוק משמר מידע אם ורק אם בסוף הריצה יש ב-•
כולה ערכים ללא אינדקסים.
אביב-תשס"ז 236363 - DBMS, Design 18
דוגמה
נתונה הסכמה דוגמה :R(A, B, C, D, E, F) וקבוצת . האם הפירוקF = {A → B, C → D, B → EF}תלויות
ρ = {R1(A, B), R2(A, C, D), R3(B, E, F)} הוא משמר מידע?
פתרון: נבנה את הרלציהr:ABCDEF
abc1d1e1f1
ab2cde2f2
a3bc3d3ef
t1
t2
t3
אביב-תשס"ז 236363 - DBMS, Design 19
דוגמה - המשך
קיבלנוt2 .ללא אינדקסים, ולכן הפירוק משמר מידע
ABCDEF
abc1d1e1f1
ab2cde2f2
a3bc3d3ef
t1
t2
t3
A → B (t1,t2)
B → EF (t3,t2)
ABCDEF
abc1d1e1f1
abcde2f2
a3bc3d3ef
t1
t2
t3ABCDEF
abc1d1e1f1
abcdef
a3bc3d3ef
t1
t2
t3
1
2
אביב-תשס"ז 236363 - DBMS, Design 20
דוגמה נוספת
נתון דוגמה :R(A,B,C,D,E), F = {A→B, B→C, C→D , DE→BC} האם . הוא משמר מידע?ρ = {R1(A,D), R2(A,E), R3(B,C,D,E)}הפירוק
ABCDE
ab1c1de1
ab2c2d2e
a3bcde
t1
t2
t3
ABCDE
ab1c1de1
ab1c1d2e
a3bcde
t1
t2
t3
ABCDE
ab1c1de1
ab1c2d2e
a3bcde
t1
t2
t3
A→Bt1,t2
B→Ct1,t2
ABCDE
ab1c1de1
ab1c1de
a3bcde
t1
t2
t3
C→Dt1,t2
ABCDE
ab1c1de1
abcde
a3bcde
t1
t2
t3
DE→BCt3,t2
.מסקנה:• מידע משמר הפירוק
אביב-תשס"ז 236363 - DBMS, Design 21
שימור תלויות
אם כל אחת מתתי-רלציות אינטואיציה :ri מעל)
πRi) מספקת את Riהסכמות F אז מסד הנתונים כולו
. Fמספק את כאשר מעדכנים את אחת מתתי-הרלציות מטרה :
באופן חוקי, גם העדכון על מסד הנתונים כולו (ה- join.בין תתי-הרלציות) הוא חוקי
אם אין שימור תלויות אז כאשר נעדכן טבלה אחת, נצטרךלבדוק מול הטבלאות האחרות כדי לוודא שהעדכון חוקי.
.שימור תלויות איננו הכרחי, אם כי רצוי
אביב-תשס"ז 236363 - DBMS, Design 22
שימור תלויות – דוגמה
:דוגמה(עיר, קדומת, טלפון) נתונה הסכמהR והתלויות
עיר} (טלפון, קדומת), קדומת הפונקציונליות {עיר =F
אותה קדומת יכולה להיות משותפת לכמה ערים, אך לכל עיר יש קדומת אחת בלבד. אותו מספר טלפון יכול להופיע בערים שונות, אך לא בערים עם אותה קדומת.
(עיר, קדומת)} שימור מידע: הפירוקR2(עיר, טלפון) ,R1{ = ρ:משמר מידע
R1 ∪ R2 = עיר, R2 \ R1 = קדומת, F ⊧ עיר →קדומת ?שאלה: האם הפירוק משמר תלויות
אביב-תשס"ז 236363 - DBMS, Design 23
דוגמה - המשך
:הפירוק אינו משמר תלויות, כי
כל אחת מהרלציותr1, r2 מקיימת את F.
עירטלפון
חיפה1234
טבעון1234
עירקדומת
חיפה04
טבעון04
r1= r2=
אביב-תשס"ז 236363 - DBMS, Design 24
דוגמה - המשך
-אבל הjoin אינו מקיים את F :
-כאשר נרצה להוסיף או לשנות מספר טלפון בr1 נצטרך כדי לוודא שהשינוי הוא חוקי.r2לבדוק גם ב-
לא די שבאותה עיר לא יהיו שני טלפונים זהים - אסור שיהיוטלפונים זהים גם בערים שונות באותו אזור חיוג.
עירקדומתטלפון
חיפה123404
טבעון123404
אביב-תשס"ז 236363 - DBMS, Design 25
שימור תלויות – המשךתהי הגדרה :R סכמה רלציונית, תהי F קבוצת תלויות
.ρ = {R1,…,Rn}, ויהי Rפונקציונליות מעל
ρ משמר תלויותהוא )dependency preserving ( בהינתןF ,R1 { (מעל הסכמות }r1,…,rn{אם לכל קבוצת רלציות
…,Rn {-בהתאמה) כך שri π⊧ RiF לכל i = 1,…,nמתקיים
⋈ ni=1 ri F.⊧
אםF בהינתן משמר תלויותהוא ρהגדרה שקולה:
F (⊆ ⋃ni =1 πRiF)+
בפירוק אם נשמרת f: תלות פונקציונלית אינטואיטיביתקיימת תת-סכמה שמכילה את כל האטריביוטים
מתוך תלויות f, או אם ניתן להסיק את fהמופיעים ב- אחרות שנשמרות בפירוק.
אביב-תשס"ז 236363 - DBMS, Design 26
אלגוריתם לבדיקת שימור תלויות
בהינתן סכמהR קבוצת תלויות פונקציונליות ,Fופירוק ρ = {R1, …,Rn} האלגוריתם הבא בודק האם ,ρ:משמר תלויות
• For each f = ( Xf → Yf) in F do• Zf ← Xf
• Repeat
• For i = 1 to n do• Zf ← Zf ((Z⋃ f R∪ i)+
F R∪ i)• Until no more changes to Zf
• ρ is dependency-preserving iff Yf Z⊆ f for every f in F.לכל תלות אינטואיציה :Xf → Yf נבנה מעין "סגור" של ,Xf באמצעות ,
מוכל בו.Yfתלויות שכבר הראינו שהן נשמרות בפירוק, ונבדוק האם
אביב-תשס"ז 236363 - DBMS, Design 27
אלגוריתם לבדיקת שימור תלויות – דוגמה
(עיר, קדומת)} בפירוקR2(עיר, טלפון) ,}R1 = ρהתלות ,
Zf אינה נשמרת: {טלפון, קדומת} = f= (טלפון, קדומת) → עיר
דוגמה: נתונה הסכמהR(A, B, C, D)קבוצת תלויות ,
F = {A → B, AC → D, BC → D}האם הפירוק . ρ = {R1(A, B), R2(B, C, D)}?משמר תלויות
.נבדוק לכל תלות האם היא נשמרת בפירוק התלותA → B נשמרת כי AB R⊆ 1 ,
התלותBC → D נשמרות כי BCD R⊆ 2
נותר לוודא שהתלותAC → D:(לפי האלגוריתם) נשמרת
אביב-תשס"ז 236363 - DBMS, Design 28
אלגוריתם לבדיקת שימור תלויות – דוגמה
Zf ← {A,C}
Zf ← {A,C} ( ({A,C} R⋃ ∪ 1)+F R∪ 1) =
{A,C} ({A}⋃ +F {A,B}) = ∪
{A,C} ({A,B} {A,B}) = {A,B,C}⋃ ∪ Zf ← {A,B,C}⋃( ({A,B,C} R∪ 2)+
F R∪ 2) =
{A,B,C} ( ({B,C}⋃ +F {B,C,D}) = ∪
{A,B,C} ({B,C,D} {B,C,D}) = {A,B,C,D}⋃ ∪ קיבלנו כי} D = {Yf Z⊆ f ={A,B,C,D} לכן התלותAC→D
נשמרת בפירוק.
אביב-תשס"ז 236363 - DBMS, Design 29
BCNFושימור תלויות
משפט: קיימת סכמהR,F עבורה לא קיים פירוק .BCNFמשמר מידע ומשמר תלויות ל-
עבור הסכמה (עיר, קידומת, טלפון)דוגמה :R וקבוצת התלויות {עיר→(טלפון,קידומת),
, משמר BCNF לא קיים פירוק Fקידומת→עיר}=מידע ומשמר תלויות.
על מנת לשמר את התלות עיר→(טלפון,הסיבה :קידומת) כל שלושת האטריביוטים חייבים להופיע
בסכמה אחת.
אביב-תשס"ז 236363 - DBMS, Design 30
BCNFלעומת שימור תלויות
לעתים קרובות יש לבחור בין שימור תלויות לביןBCNF.:קריטריון לבחירה: אופן השימוש הצפוי במסד הנתונים
הרבה עדכונים של שדה עם כפילויות בסכמה המקורית (החלפת (מונע כפילויות):BCNF פירוק ל-⇐קידומת של עיר)
.R1,(עיר, טלפון)R2(עיר, קידומת) הרבה הוספות/עדכונים של שדות המופיעים בתלות שלא נשמרת
ללא פירוק (שימור תלויות): (עיר, ⇐בפירוק (למשל, מס' טלפון) Rקידומת, טלפון)
3אלטרנטיבה אחרת: צורה נורמליתNF
אביב-תשס"ז 236363 - DBMS, Design 31
3NFצורה נורמלית שלישית -
תהי הגדרה :R סכמה רלציונית ותהי F קבוצת בהינתן 3NFב- היא R. Rתלויות פונקציונליות מעל
F אם לכל תלות פונקציונלית לא טריוויאלית X → A F∈+ -מתקיים או שX-הינו על-מפתח או ש A שייך
.R,Fלמפתח קביל של תהי משפט :F קבוצת תלויות פונקציונאליות שכולן
בצד ימין. אם סכמה אחדבעלות אטריביוט , כלומר קיימת 3NF איננה ב-R,Fרלציונית
, אזי 3NFשמפרה את תנאי ה- +X→A∈ Fתלותשמפרה את תנאי Y→B∈ F קיימת תלות
.3NFה-
אביב-תשס"ז 236363 - DBMS, Design 32
?3NFאיך נבדוק שהסכמה ב-
:על פי המשפט אםFלא מהצורה הנדרשת, ניצור F '-כך ש
F'= { X → A | X → Y F ∈ A Y}∈עבור כלX→A∈ F’ נבדוק כיX-הינו על-מפתח או ש A
.R,Fמוכל במפתח קביל של -אם אין תלות בF’ 3 המפרה אתNF נסיק כי ,R,F
.3NFנמצאת ב-
R,F מבטיח כי גם 3NF ב-’R,Fשאלה: מדוע היותה של ?3NFב-
אביב-תשס"ז 236363 - DBMS, Design 33
דוגמה
(עיר, קידומת, טלפון) הסכמהR בהינתן התלויות :הפונקציונליות
F = { עיר) →טלפון, קידומת, (עיר →קידומת }
3NF.נמצאת ב- :הסיבה
-קידומת, המפתחות הקבילים של הסכמה הם (עיר, טלפון) ו)טלפון).
כל תלות מתוךF-3 מקיימת את תנאי הNF. לפי המשפט מספיק לבדוק רק את התלויות שלF.
אביב-תשס"ז 236363 - DBMS, Design 34
3NF לעומתBCNF
3NF-היא דרישה חלשה יותר מ BCNF כל סכמה :, אך 3NF היא אוטומטית גם ב-BCNFשנמצאת ב-
מונעת יותר BCNFההפך אינו בהכרח נכון. לכן .3NFכפילויות בלתי רצויות מאשר
-3פירוק לNF מוגדר באופן דומה לפירוק .BCNFל-
3יתרון שלNF על פני BCNF תמיד קיים פירוק - שהוא משמר מידע ותלויות.3NFל-
אביב-תשס"ז 236363 - DBMS, Design 35
3NF ל-Rאלגוריתם לפירוק סכמה
בהינתן כיסוי מינימלי של תלויות פונקציונליותF:, R תלות פונקציונלית שכוללת את כל התכונות ב-Fאם קיימת ב-1.
} - עצור.Rהתשובה היא {
לכל קבוצת תלויות פונקציונליות2.
X → An X → A2,…, X → A1, התלויות באותוXצור סכמה ,
{ X ⋃ { A1A2 ...An.
, הוסף סכמה שהיא Rאם אין אף סכמה המכילה מפתח קביל של •.Rמפתח קביל כלשהו של
.הפירוק שאלגוריתם זה מוצא הוא משמר מידע ותלויות
אביב-תשס"ז 236363 - DBMS, Design 36
– דוגמה3NFפירוק ל-
: נתון:דוגמה
R(dname, daddr, id, pname, paddr, pres_no, date, med_name, qnt)F = {dname → daddr, id → pname, id → paddr, id → dname, pres_no →
date, pres_no → id, (pres_no, med_name) → qnt}.R תלות פונקציונלית המכילה את כל התכונות ב-Fלא קיימת ב-1.ניצור סכמות לפי התלויות הפונקציונליות:2.
R1(dname, daddr)
R2(id, pname, paddr, dname)
R3(pres_no, date, id)
R4(pres_no, med_name, qnt).3R4 כוללת את המפתח הקביל )pres_no, med_name( ולכן אין צורך ,
להוסיף עוד סכמה.