Download presentation
Presentation is loading. Please wait.
1
4 July 2007 נרמול מסד הנתונים כאשר מסד הנתונים עובר את שלב התכנון הראשוני יכולים להיווצר מספר בעיות בתכנון הנובעות מיתירות: אחת הבעיות הנפוצות ביותר במסדי נתונים רלציוניים. יתירות יכולה להתאפיין ביתירות של אחסון המידע או יתירות בשעת פעולות עדכון (לפעמים אנו נאלץ לעדכן יותר ממה שחשבנו). ע"י שימוש באילוצי העקביות אשר תלויים בסמנטיקה של האפליקציות ניתן להגדיר קבוצת תלויות פונקציונאליות ולהשתמש בטכניקות פירוק (Decomposition) ע"מ לשפר (אולי) את התכנון. לצערנו, ישנם פירוקים הגורמים ליותר נזק מאשר תועלת, למשל פירוקים שאינם משמרים תלויות או מידע. על כן ברצוננו למצוא את אותם פירוקים שייהנו מתכונות "טובות" בשעת שיפור התכנון של המסד הראשוני. DBMS, Design
2
תלויות פונקציונאליות Functional Dependencies
4 July 2007 תלויות פונקציונאליות Functional Dependencies הגדרה תהי R(A1,A2,..An) סכמה רלציונית, תהי r רלציה מעל הסכמה R, ויהיו X,Y⊆R קבוצות אטריבוטים. r מקיימת את התלות הפונקציונאלית X→Y אם לכל שני n-יות t1,t2∈r כך ש-πx(t2)=πx(t1) מתקיים ש- πy(t2)=πy(t1). (סימון: r ╞ X→Y ). הכלי הבסיסי בתכנון סכמות רלציוניות הוא התלות. תלויות מבטאות את העובדה שלא כל צירוף של ערכים הוא חוקי והגיוני במסד הנתונים. לדוגמא, אם קיים יחס של אחד לרבים בין מחלקה לעובדים (כלומר כל עובד שייך למחלקה אחת בלבד) אז לא יתכנו בטבלה EMP שתי רשומות עם ערכים זהים בעמודה EMPNO וערכים שונים ב- DEPNO. במילים אחרות , EMPNO קובעת באופן פונקציונאלי (חד-ערכי) את DEPNO. ניתן להציג את העובדה הזאת בצורה: EMPNO->DEPNO DBMS, Design
3
4 July 2007 תלויות פונקציונאליות הערה 1: בהינתן r רלציה (מופע של R) ניתן לבדוק תמיד האם היא מקיימת FD כלשהי, אך מקרה הפוך אינו נכון. הערה 2: מתוך ההגדרה נובע כי מפתח K של רלציה מקיים: K→R K לא בהכרח מינימאלי. אם K מינימאלי אזי הוא מפתח קביל. DBMS, Design
4
4 July 2007 תלויות פונקציונאליות הגדרה: תהי R סכמה רלציונית, תהי r רלציה מעל הסכמה R , ותהי F קבוצה של תלויות פונקציונאליות מעל R. r מקיימת את F (סימון r ⊧ F) אם לכל תלות פונקציונאלית f ב-F מתקיים: r ⊧ f. הגדרה: תהי R סכמה רלציונית, תהי r רלציה מעל הסכמה R, ותהי f תלות פונקציונאלית מעל R. f נובעת מ-F (סימון: F ⊧ f) אם לכל רלציה r מעל הסכמה R מתקיים: r ⊧ F⇒ r ⊧ f . DBMS, Design
5
4 July 2007 תלויות פונקציונאליות הגדרה: תהי F קבוצת תלויות פונקציונאליות. הסגור של F (סימון: F+) הוא: {X→Y | F ⊧ X→Y }. דוגמא: מצא F+ של F={A →B,B →C}. ב F+ תהיינה בין היתר התלויות הפונקציונאליות הבאות: A →C, AB →C, AC →C, B →B, A →B, ∅ → ∅, C → ∅ DBMS, Design
6
4 July 2007 תלויות פונקציונאליות אקסיומות ארמסטרונג: אילו הן שלושה כללי היסק שעוזרים בחישוב F+ : X,Y,Z,W ⊆R רפלקסיביות: אם X⊆Y אז Y→X . הכללה: אם X →Y אז XZ →YZ . טרנזיטיביות: אם X →Y ו- Y →Z אז X →Z . כללי היסק נוספים: איחוד: אם X →Y ו- X →Z אז X →YZ . פירוק: אם X →Y ו- Z⊆Y אז X →Z . טרנזיטיביות למחצה: אם X →Y ו- WY →Z אז WX →Z . שלושת כללי היסק הנוספים נובעים מאקסיאומות אמסטרונג. כלומר, הם ניתנים להוכחה מתוך האקסיומות. DBMS, Design
7
תלויות פונקציונאליות תרגיל
4 July 2007 תלויות פונקציונאליות תרגיל נתון F={A →B,B →C} , R(A,B,C). הראו כי A →BC F ├ (כלומר ניתן להסיק). DBMS, Design
8
4 July 2007 תלויות פונקציונאליות הגדרה: תהי X קבוצת אטריבוטים ותהי F קבוצת תלויות פונקציונאליות. הסגור של X בהינתן F (סימון: X+F ) הוא: {A | F├ X→A}. (A הוא אטריביוט) DBMS, Design
9
תלויות פונקציונאליות אלגוריתם לחישוב X+F : S ← X Repeat
4 July 2007 תלויות פונקציונאליות אלגוריתם לחישוב X+F : S ← X Repeat For each (Y→ Z) in F If Y⊆S then S←S⋃Z until no more changes to S. return S DBMS, Design
10
4 July 2007 תלויות פונקציונאליות תרגיל: נתון F={A →B,B →C} , R(A,B,C). חשבו את A+F. הערה: ניתן לשים לב ש-X הוא על מפתח של R אם X+F=R. DBMS, Design
11
4 July 2007 פירוק הגדרה: פירוק (decomposition) של R הוא קבוצת סכמות {R1, R2 ,.., Rn} ρ= כך ש- ⋃i=1..nRi=R . תכונות של הפירוק: שימור מידע (התכונה החיונית ) שימור תלויות. (איננו הכרחי , אם כי הוא רצוי.) כפי שנאמר לפעמים צריך לפרק סכמה רלציונית לכמה סכמות קטנות יותר כדי למנוע כפילויות. כאשר מפרקים סכמה רלציונית יש לשים לב לשתי תכונות של הפירוק: שימור מידע ושימור תלויות. התכונה החיונית היא שימור המידע. לעומת זאת, שימור תלויות איננו הכרחי , אם כי הוא רצוי. DBMS, Design
12
4 July 2007 שימור מידע הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונאליות , ויהי {R1, R2 ,.., Rn} ρ= פירוק של R. ρ הוא משמר מידע (lossless join) בהינתן F אם לכל רלציה r מעל R המקיימת r ╞ F מתקיים πRi(r)=r ⋈ i=1..n שימור מידע משמעו שהפירוק אינו מאבד אינפורמציה, ונוכל לקבל בחזרה בדיוק את מידע שהיה לנו בטבלה המקורית ע"י פעולות צירוף (join) בין תת הטבלאות. אם הפירוק אינו משמר מידע , בד"כ הצירוף ייתן רשומות מיותרות שלא היו בטבלה המקורית. DBMS, Design
13
שימור מידע דוגמה: R(ID, NAME, ADDR), F = {ID → NAME, ID → ADDR}
4 July 2007 שימור מידע דוגמה: R(ID, NAME, ADDR), F = {ID → NAME, ID → ADDR} האם הפירוק ρ = {R1(ID, NAME), R2(NAME, ADDR)} משמר מידע? DBMS, Design
14
שימור מידע πR1(r) ⋈ πR2(r) πR1(r) πR2(r)
4 July 2007 שימור מידע r = ADDR NAME ID ת"א ראובן 1 חיפה 2 πR1(r) ⋈ πR2(r) ADDR NAME ID ת"א ראובן 1 חיפה 2 πR1(r) πR2(r) NAME ID ראובן 1 2 ADDR NAME ת"א ראובן חיפה הפירוק אינו משמר מידע התוכן של r מקיים את התלויות אך הפירוק מפר את התנאי של שימור מידע DBMS, Design
15
שימור מידע πR’1(r) πR’2(r)
4 July 2007 שימור מידע לעומת זאת, הפירוק ρ’ = {R’1(ID, NAME), R’2(ID, ADDR)} משמר מידע: πR’1(r) ⋈ πR’2(r) = r πR’1(r) πR’2(r) r = ADDR NAME ID ת"א ראובן 1 חיפה 2 NAME ID ראובן 1 2 ADDR ID ת"א 1 חיפה 2 DBMS, Design
16
שימור מידע בפירוק לשתי סכמות
4 July 2007 שימור מידע בפירוק לשתי סכמות משפט: פירוק לשתי סכמות ρ = {R1, R2} הוא משמר מידע אם ורק אם F ⊧ (R1⋂R2) → (R1\ R2) או F ⊧ (R1⋂R2) → (R2\ R1) DBMS, Design
17
שימור מידע בפירוק לשתי סכמות
4 July 2007 שימור מידע בפירוק לשתי סכמות בדוגמה האחרונה R(ID, NAME, ADDR) F = {ID → NAME, ID → ADDR} הפירוק ρ = {R1(ID, NAME), R2(NAME, ADDR)} התלות NAME→ ID אינה נובעת מ-F, וגם לא NAME → ADDR, ולכן אינו משמר מידע לכל תוכן אפשרי של R. לעומת זאת, הפירוק ρ = {R1(ID, NAME), R2(ID, ADDR)} כן מקיים (למשל) ID → NAME ולכן, לפי המשפט, כן משמר מידע. DBMS, Design
18
שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע
4 July 2007 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע אתחול: צור רלציה r מעל הסכמה R. לכל תת-סכמה Ri נקצה ברלציה r שורה אחת ti ti מקבלת את הערך a לכל עמודה A∈Ri ואת הערך ai לכל עמודה A∉Ri. (הערך b או bi לכל עמודה B. הערך c או ci לכל עמודה C וכו'...) DBMS, Design
19
שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע
4 July 2007 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע משמעות הצעד כל עוד אין ב-r שורה שכולה ללא אינדקסים, ויש ב-r שתי שורות ti, tj כך ש- ti[X]=tj[X] עבור תלות פונקציונלית כלשהי (X → Y) ∈ F, השווה את הערכים ב-tj[Y] וב-ti[Y], DBMS, Design
20
שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע
4 July 2007 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע הפעלת הצעד: עבור תלות פונקציונאלית כלשהי (X → Y) ∈ F ושורות בהן ti[X]=tj[X] בצע לכל עמודה A∈ Y, אם אחד משני הערכים ti[A], tj[A] הוא a (ללא אינדקס), החלף את הערך האחר ב-a, ואחרת החלף את tj[A] ב-ti[A] או את ti[A] ב-tj[A], כרצונך. DBMS, Design
21
שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע
4 July 2007 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע תוצאה הפירוק משמר מידע אם ורק אם בסוף הריצה יש ב-r שורה שהיא כולה ערכים ללא אינדקסים DBMS, Design
22
שימור מידע תרגיל: נתונה הסכמה R(A, B, C, D, E, F)
4 July 2007 שימור מידע תרגיל: נתונה הסכמה 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)} הוא משמר מידע? DBMS, Design
23
שימור מידע - תרגיל פתרון: נבנה את הרלציה r: F E D C B A f1 e1 d1 c1 b
4 July 2007 שימור מידע - תרגיל פתרון: נבנה את הרלציה r: F E D C B A f1 e1 d1 c1 b a f2 e2 d c b2 f e d3 c3 a3 t1 t2 t3 DBMS, Design
24
שימור מידע - תרגיל A → B(t1,t2) B → EF(t2,t3) F E D C B A f1 e1 d1 c1
4 July 2007 שימור מידע - תרגיל F E D C B A f1 e1 d1 c1 b a f2 e2 d c b2 f e d3 c3 a3 A → B(t1,t2) t1 1 t2 F E D C B A f1 e1 d1 c1 b a f2 e2 d c f e d3 c3 a3 t3 t1 t2 F E D C B A f1 e1 d1 c1 b a f e d c d3 c3 a3 t3 t1 2 t2 B → EF(t2,t3) t3 קיבלנו t2 ללא אינדקסים, ולכן הפירוק משמר מידע. DBMS, Design
25
שימור מידע - דוגמה נוספת
4 July 2007 שימור מידע - דוגמה נוספת דוגמא: נתון 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)} הוא משמר מידע? E D C B A e1 d c1 b1 a e d2 c2 b2 c b a3 E D C B A e1 d c1 b1 a e d2 c2 c b a3 E D C B A e1 d c1 b1 a e d2 c b a3 t1 t1 t1 A→B t1,t2 B→C t1,t2 t2 t2 t2 t3 t3 t3 E D C B A e1 d c1 b1 a e c b a3 E D C B A e1 d c1 b1 a e c b a3 t1 t1 C→D t1,t2 DE→BC t3,t2 t2 t2 t3 t3 מסקנה: הפירוק משמר מידע. DBMS, Design
26
שימור תלויות אינטואיציה: אם כל אחת מתתי-רלציות ri (מעל הסכמות Ri) מספקת את πRiF אז מסד הנתונים כולו מספק את F. מטרה: כאשר מעדכנים את אחת מתתי-הרלציות באופן חוקי, גם העדכון על מסד הנתונים כולו (ה- join בין תתי-הרלציות) הוא חוקי. אם אין שימור תלויות אז כאשר נעדכן טבלה אחת, נצטרך לבדוק מול הטבלאות האחרות כדי לוודא שהעדכון חוקי. שימור תלויות איננו הכרחי, אם כי רצוי. DBMS, Design
27
שימור תלויות – דוגמה דוגמה:
4 July 2007 שימור תלויות – דוגמה דוגמה: נתון: (עיר, קדומת, טלפון)R {עיר (טלפון, קדומת), קדומת עיר} =F {(עיר, קדומת)R2, (עיר, טלפון)R1}= ρ משמר מידע: R1 ⋂ R2 = עיר, R2 \ R1 = קדומת, F ⊧ עיר קידומת שאלה: האם הפירוק משמר תלויות? אותה קדומת יכולה להיות משותפת לכמה ערים, אך לכל עיר יש קדומת אחת בלבד. אותו מספר טלפון יכול להופיע בערים שונות, אך לא בערים עם אותה קדומת. DBMS, Design
28
שימור תלויות - דוגמה - המשך
4 July 2007 שימור תלויות - דוגמה - המשך הפירוק אינו משמר תלויות, כי: כל אחת מהרלציות r1, r2 מקיימת את F. r1= עיר טלפון חיפה 1234 טבעון r2= עיר קידומת חיפה 04 טבעון DBMS, Design
29
שימור תלויות - דוגמה - המשך
4 July 2007 שימור תלויות - דוגמה - המשך אבל ה-join אינו מקיים את F : כאשר נרצה להוסיף או לשנות מספר טלפון ב- r1 נצטרך לבדוק גם ב- r2 כדי לוודא שהשינוי הוא חוקי. לא די שבאותה עיר לא יהיו שני טלפונים זהים - אסור שיהיו טלפונים זהים גם בערים שונות באותו אזור חיוג. עיר קידומת טלפון חיפה 04 1234 טבעון DBMS, Design
30
הוא: { X→Y | X → Y∈F+ ∧ X⋃Y ⊆ S }.
4 July 2007 שימור תלויות (היטל) הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונאליות מעל R, ותהי S⊆R ההיטל של F על תת הסכמה S (סימון: πSF) הוא: { X→Y | X → Y∈F+ ∧ X⋃Y ⊆ S }. בכדי להגדיר זאת פורמאלית יש להגדיר תחילה את המושג של היטל של קבוצת תלויות על תת-סכמה כלומר אותן תלויות שהן רלוונטיות לתת - הסכמה. DBMS, Design
31
4 July 2007 שימור תלויות הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונאליות מעל R, ויהי {R1, R2 ,.., Rn} ρ= פירוק של R. הפירוק הוא משמר תלויות (dependency preserving) בהינתן F אם לכל קבוצת רלציות {r1,r2,…,rn} (מעל סכמות: {R1, R2 ,.., Rn} ) כך ש- πRiF ╞ri לכל i=1,…,n מתקיים: ⋈i=1..n ri╞ F DBMS, Design
32
הפירוק הוא משמר תלויות בהינתן F אם F ⊆ (⋃ni =1 πRiF)+
4 July 2007 שימור תלויות הגדרה שקולה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונאליות מעל R, ויהי {R1, R2 ,.., Rn} ρ= פירוק של R. הפירוק הוא משמר תלויות בהינתן F אם F ⊆ (⋃ni =1 πRiF)+ אינטואיטיבית: תלות פונקציונלית f נשמרת בפירוק אם קיימת תת-סכמה שמכילה את כל האטריביוטים המופיעים ב- f, או אם ניתן להסיק את f מתוך תלויות אחרות שנשמרות בפירוק. DBMS, Design
33
4 July 2007 שימור תלויות תלות פונקציונאלית f נשמרת בפירוק אם קיימת תת-סכמה שמכילה את כל האטריבוטים המופיעים ב-f , או אם ניתן להסיק את f מתוך תלויות אחרות שנשמרות בפירוק. שימור תלויות משמעו שכאשר מעדכנים את מסד הנתונים, אם מוודאים שכל תת טבלה בפני עצמה נשארת עקבית אז מובטח שגם המסד כולו הוא עקבי (כלומר אינו מפר את התלויות הפונקציונאליות). תלות פונקציונאלית f נשמרת בפירוק אם קיימת תת-סכמה שמכילה את כל האטריבוטים המופיעים ב-f , או אם ניתן להסיק את f מתוך תלויות אחרות שנשמרות בפירוק. DBMS, Design
34
שימור תלויות אלגוריתם לבדיקת שימור תלויות
4 July 2007 שימור תלויות אלגוריתם לבדיקת שימור תלויות R סכמה רלציונית,F קבוצת תלויות פונקציונאליות מעל R, ו- {R1, R2 ,.., Rn} ρ= פירוק של R. בהינתן סכמה R , קבוצת תלויות פונקציונאליות F ופירוק {R1, R2 ,.., Rn} ρ= , האלגוריתם הבא בודק האם הפירוק משמר תלויות: DBMS, Design
35
שימור תלויות תרגיל: האם הפירוק ρ משמר תלויות? כאשר נתון: R(A, B, C, D)
4 July 2007 שימור תלויות תרגיל: האם הפירוק ρ משמר תלויות? כאשר נתון: R(A, B, C, D) F = {A → B, AC → D, BC → D} ρ = {R1(A, B), R2(B, C, D)} DBMS, Design
36
אלגוריתם לבדיקת שימור תלויות – דוגמה
דוגמה: נתונה הסכמה R(A, B, C, D), קבוצת תלויות F = {A → B, AC → D, BC → D}. האם הפירוק ρ = {R1(A, B), R2(B, C, D)} משמר תלויות? נבדוק לכל תלות האם היא נשמרת בפירוק. התלות A → B נשמרת כי AB ⊆ R1, התלות BC → D נשמרות כי BCD ⊆ R2 נותר לוודא שהתלות AC → D נשמרת (לפי האלגוריתם): DBMS, Design
37
אלגוריתם לבדיקת שימור תלויות – דוגמה
Zf ← {A,C} Zf ← {A,C} ⋃( ({A,C}⋂R1)+F ⋂ R1) = {A,C} ⋃ ({A}+F ⋂ {A,B}) = {A,C} ⋃({A,B} ⋂ {A,B}) = {A,B,C} Zf ← {A,B,C} ⋃( ({A,B,C} ⋂ R2)+F ⋂ R2) = {A,B,C} ⋃( ({B,C}+F ⋂ {B,C,D}) = {A,B,C} ⋃({B,C,D} ⋂ {B,C,D}) = {A,B,C,D} קיבלנו כי {D} = Yf ⊆ Zf ={A,B,C,D}לכן התלות AC→D נשמרת בפירוק. DBMS, Design
38
4 July 2007 צורות נורמאליות צורה נורמאלית (Normal Form) היא תכונה של סכמה רלציונית, המודדת את "טיב" הסכמה מבחינת מניעת כפילויות. BCNF 3NF צורה נורמאלית (Normal Form) היא תכונה של סכמה רלציונית, המודדת את "טיב" הסכמה מבחינת מניעת כפילויות. אנו נעסוק שבני צורות נורמאליות שונות: BCNF ו- 3NF , כאשר BCNF נחשבת לצורה נורמאלית יותר חזקה. DBMS, Design
39
צורה נורמאליתBCNF – Boyce-Codd
4 July 2007 צורה נורמאליתBCNF – Boyce-Codd הגדרה: תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונאליות מעל R. אומרים ש-R היא ב-BCNF אם לכל תלות פונקציונאלית X → Y∈F+ כך ש- Y⊄X, X הוא על-מפתח של R. BCNF מבטאת את העובדה שתלות פונקציונאלית במשהו שאינו מפתח-על היא "דבר רע"; אם קיימת תלות לא טריוויאלית בקבוצת שדות שאיננה מפתח על אזי תכנון הסכמות הרלציוניות הוא לקוי, ובמסד עלולות להיווצר כפילויות. DBMS, Design
40
BCNF – דוגמא דוגמה: הסכמה קבוצת התלויות הפונקציונליות
(Cust_Id, Track, Faculty, Book_Name)R קבוצת התלויות הפונקציונליות F={Cust_Id→Track,Track → Faculty} האם בהינתן קבוצת תלויות זו סכמה בBCNF? DBMS, Design
41
BCNF – דוגמא דוגמה: בהינתן קבוצת התלויות הפונקציונליות
F={Cust_Id→Track,Track → Faculty} הסכמה (Cust_Id, Track, Faculty, Book_Name)R איננה ב-BCNF: ב-F קיימת התלות → Faculty Track, אך Track אינו על-מפתח. הסבר: ניתן להיעזר במשפט כדי לבדוק האם R,F ב-BCNF. כפילויות במסד: למשל, שם הפקולטה CS מופיע ברלציה פעמים רבות, כמספר הספרים שהוזמנו ע"י סטודנטים השייכים למסלולים של הפקולטה CS. פתרון: פירוק ל-BCNF - פירוק של R לתתי-סכמות כך שכל אחת מהן נמצאת ב-BCNF יחסית לתלויות הרלוונטיות לה (הגדרה מדויקת תינתן בשקף הבא). DBMS, Design
42
צורה נורמאלית BCNF – Boyce-Codd
4 July 2007 צורה נורמאלית BCNF – Boyce-Codd הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונאליות מעל R, ויהי {R1, R2 ,.., Rn} ρ= פירוק של R. ρ הוא פירוק ל-BCNF אם כל תת-סכמה היא ב-BCNF בהינתן πRi F. (הערה: באופן דומה מגדירים פירוק לצורה הבאה שנראה 3NF). DBMS, Design
43
צורה נורמאלית BCNF אלגוריתם לפירוק סכמה R ל BCNF (בהינתן קבוצת תלויות F)
decompose(Z) תחזיר לנו פירוק משמר מידע של Z כך ש-Y הוא ב-BCNF ואת Z (תוצאת הפירוק) נמשיך לפרק. DBMS, Design
44
צורה נורמאלית BCNF אלגוריתם לפירוק סכמה R ל BCNF (בהינתן קבוצת תלויות F)
בסכמה המוחזרת Z\A השימוש הוא בתכונה A האחרונה שנבחרה בלולאה. מציאת התלות Z\AB →A היא עבור A,B ∈ Z ובהתחשב ב- F המקורית. טענה: אם Z אינה ב-BCNF אזי קיימים A ו-B כך ש- Z\AB →A . מכך שאם לא ניתן למצוא A ו- B כאלה אז Z אינה ניתנת לפירוק והיא ב-BCNF. שימו לב: אם Z ב-BCNF ייתכן ועדיין נמצא A ו-B כאלה והאלגוריתם ימשיך לפרק את Z. כרגע אין בידינו אלגוריתם יעיל להכרעה האם תת סכמה היא ב-BCNF. טענה: הפירוק {Z\A,Y} הוא משמר מידע. DBMS, Design
45
דוגמה נתונה הסכמה R (ציונים של סטודנטים), וקבוצת תלויות F:
4 July 2007 דוגמה נתונה הסכמה R (ציונים של סטודנטים), וקבוצת תלויות F: R(sid , sname , cno , cname, grade) F = {sid → sname, cno → cname, (sid , cno ) → grade} sid -- מס' סטודנט sname שם סטודנט cno מס' קורס Cname שם קורס Grade ציון DBMS, Design 45
46
דוגמה - המשך F = {sid → sname, cno → cname, (sid, cno) → grade}
R(sid, sname, cno, cname, grade) נבצע decompose ל-R ע"פ האלגוריתם {sid,sname,cno,cname,grade}\{sname,grade} → sname {sid,sname,cno,cname}\{sname,cno} → sname {sid,sname,cname}\{sname,cname} → sname {sid,sname} Z = {sid,sname,cno,cname,grade}\{sname} = {sid,cno,cname,grade} Y = {sid,sname} DBMS, Design 46
47
דוגמה - המשך F = {sid → sname, cno → cname, (sid, cno) → grade}
Z = {sid,cno,cname,grade} נמשיך ונבצע decompose ל-Z ע"פ האלגוריתם {sid,cno,cname,grade}\{cname,sid} → cname {cno,cname,grade}\{cname,grade} → cname {cno,cname} Z = {sid, cno,cname,grade}\{cname} = {sid,cno,grade} Y = {cno,cname} בשלב זה לא ניתן יותר למצוא A ו-B כך ש- Z\AB →A ולכן decompose תחזיר STOP. DBMS, Design 47
48
דוגמה - המשך וכך יצא הפירוק: F = {sid → sname, cno → cname, (sid, cno) → grade} R(sid, sname, cno, cname, grade) R2(sid, cno, cname, grade) R1(sid, sname) R3(sid, cno, grade) R4(cno, cname) לפי הבנייה, הפירוק ל- {R1,R3,R4} הוא משמר מידע וב-BCNF. DBMS, Design 48
49
צורה נורמאלית BCNF אלגוריתם לפירוק סכמה R ל BCNF (בהינתן קבוצת תלויות F)
טענה: אם Z אינה ב-BCNF אזי קיימים A ו-B כך ש- {Z\AB} →A . אם Z אינה ב-BCNF קיימת תלות X→Y כך ש-X אינו על-מפתח ו- Y⊄X. מאחר ו-X אינו על מפתח קיים B כך שלא מתקיים X →B. מכך נובע X ⊆{Z\B} Y⊄Xולכן קיים A כך ש- A ∈Y ו-A ∉X. מכך נובע X ⊆{Z\AB} מכך נובע {Z\AB} →Y כך נובע {Z\AB} →A. DBMS, Design
50
צורה נורמאלית BCNF אלגוריתם לפירוק סכמה R ל BCNF (בהינתן קבוצת תלויות F)
טענה: הפירוק {Z\A,Y} הוא משמר מידע. A היא התכונה האחרונה כך ש (Y\AB) →A. לאחר מכן Y הופך להיות Y\B. לכן בסופו של דבר נקבל (Y\A) →A. מאחר ו-Z מכיל את כל התכונות בסכמה אז Z\A ⋂ Y = Y\A נבחין כי A=(Y\(Z\A)) ומכאן (Z\A ⋂ Y) →(Y\(Z\A)) וזהו התנאי לשימור מידע. DBMS, Design
51
4 July 2007 צורה נורמאלית BCNF אלגוריתם לפירוק סכמה R ל BCNF (בהינתן קבוצת תלויות F) הערות הפירוק שאלגוריתם זה מוצא הוא משמר מידע אך לא בהכרח משמר תלויות. לא כל פירוק בצורת BCNF משמר מידע. רק אם הפירוק נוצר תוך כדי שימור מידע כגון באלגוריתם הזה אז התוצאה הסופית היא משמרת מידע. 4 July 2007 DBMS, Design 51
52
צורה נורמאלית BCNF – Boyce-Codd
4 July 2007 צורה נורמאלית BCNF – Boyce-Codd תמיד קיים פירוק ל-BCNF שמשמר מידע , אך לא תמיד קיים פירוק ל-BCNF שמשמר תלויות. משפט: קיימים R סכמה רלציונית ו- F קבוצת תלויות פונקציונאליות מעל R עבורם לא קיים פירוק משמר מידע ומשמר תלויות ל-BCNF. DBMS, Design
53
BCNF ושימור תלויות הוכחה ע"י דוגמה:
4 July 2007 BCNF ושימור תלויות הוכחה ע"י דוגמה: עבור הסכמה (עיר, קידומת, טלפון)R וקבוצת התלויות {עיר→(טלפון,קידומת), קידומת→עיר}=F לא קיים פירוק BCNF, משמר מידע ומשמר תלויות. הסיבה: על מנת לשמר את התלות עיר→(טלפון,קידומת) כל שלושת האטריביוטים חייבים להופיע בסכמה אחת. DBMS, Design
54
BCNF לעומת שימור תלויות
קריטריון לבחירה: אופן השימוש הצפוי במסד הנתונים: הרבה עדכונים של שדה עם כפילויות בסכמה המקורית (החלפת קידומת של עיר) ⇐ פירוק ל-BCNF (מונע כפילויות): (עיר, קידומת)R2,(עיר, טלפון)R1. הרבה הוספות/עדכונים של שדות המופיעים בתלות שלא נשמרת בפירוק (למשל, מס' טלפון) ⇐ ללא פירוק (שימור תלויות): (עיר, קידומת, טלפון)R . לשם כך נשתמש בצורה נורמלית 3NF DBMS, Design
55
צורה נורמאלית 3NF X הוא מפתח על של R או Y מוכל במפתח קביל של R. הגדרה:
4 July 2007 צורה נורמאלית 3NF הגדרה: תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונאליות מעל R. R היא ב-3NF אם לכל תלות פונקציונאלית X→Y∈F+ כך ש- Y ⊈ X, X הוא מפתח על של R או Y מוכל במפתח קביל של R. DBMS, Design
56
דוגמה הסכמה (עיר, קידומת, טלפון) R בהינתן התלויות הפונקציונליות:
F {עיר→(טלפון,קידומת), קידומת→עיר}= נמצאת ב-.3NF הסיבה: המפתחות הקבילים של הסכמה הם (עיר, טלפון) ו- (קידומת,טלפון). כל תלות מתוך F מקיימת את תנאי ה-3NF. מספיק לבדוק רק את התלויות של F. DBMS, Design
57
צורות נורמאליות תמיד מתקיים: כל סכמה שהיא ב-BCNF היא גם ב-3NF
4 July 2007 צורות נורמאליות תמיד מתקיים: כל סכמה שהיא ב-BCNF היא גם ב-3NF ההפך לא בהכרח BCNF מונעת יותר כפילויות בלתי רצויות מאשר 3NF תמיד קיים פירוק ל-3NF שהוא משמר מידע ותלויות פירוק ל-3NF מוגדר באופן דומה לפירוק ל-BCNF. DBMS, Design
58
כיסוי מינימלי בקבוצת תלויות פונקציונליות יכול להיות מידע עם חזרות.
4 July 2007 כיסוי מינימלי בקבוצת תלויות פונקציונליות יכול להיות מידע עם חזרות. דוגמה: שתי הקבוצות ,G={AB, BC,AC} F={AB,BC} הן "שקולות", במובן ש- F+ = G+. מטרה: להביא את כל קבוצות התלויות פונקציונליות לצורה אחידה. DBMS, Design
59
כיסוי מינימאלי (Minimal Cover)
4 July 2007 כיסוי מינימאלי (Minimal Cover) הגדרה: תהי F קבוצת תלויות פונקציונליות. כיסוי מינימאלי (minimal cover) של F הוא קבוצת תלויות פונקציונליות FC כך ש-FC מינימלית ו- F+ = FC+. הכיסוי המינימאלי אינו בהכרח יחיד DBMS, Design
60
כיסוי מינימלי (Minimal Cover)
4 July 2007 כיסוי מינימלי (Minimal Cover) הגדרה: תהי F קבוצת תלויות פונקציונליות. F היא מינימלית אם לכל תלות X→ Y ∈ F מתקיימות שלוש הדרישות הבאות: |Y| = 1 F+ ≠ (F \ {X → Y})+ ( אין ב-F תלויות "מיותרות".) לכל Z ⊊ X מתקיים F+ ≠ (F \ {X → Y} {Z → Y})+ ( אין ב-F תלות A → X שבה X מכילה תכונות "מיותרות".) DBMS, Design
61
אלגוריתם למציאת כיסוי מינימלי של קבוצת תלויות פונקציונליות F
4 July 2007 אלגוריתם למציאת כיסוי מינימלי של קבוצת תלויות פונקציונליות F G ← {(X→ A) | Y ((X →Y) ∈ F A ∈ Y)}; Repeat For each f = X → A ∈ G do if A ∈ X+G\ {f} then G ← G\ {f}; For each f = X → A ∈ G and B ∈ X do if A∈(X\{B})+G then G←G\{X → A} {X\{B} → A}; until no more changes to G DBMS, Design
62
אלגוריתם לפירוק סכמה R ל-3NF
אם קיימת ב-F תלות פונקציונלית שכוללת את כל התכונות ב-R, התשובה היא {R} - עצור. לכל קבוצת תלויות פונקציונליות X → An X → A2,…, X → A1, התלויות באותו X, צור סכמה } { XA1A2 ...An. אם אין אף סכמה המכילה מפתח קביל של R, הוסף סכמה שהיא מפתח קביל כלשהו של R. הפירוק שאלגוריתם זה מוצא הוא משמר מידע ותלויות. DBMS, Design
63
פירוק ל-3NF – דוגמה תרגיל: פרק הסכמה הבאה ל-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} DBMS, Design
64
פירוק ל-3NF – דוגמה דוגמה: פתרון R1(dname, daddr)
ניצור סכמות לפי התלויות הפונקציונליות: R1(dname, daddr) R2(id, pname, paddr, dname) R3(pres_no, date, id) R4(pres_no, med_name, qnt) R4 כוללת את המפתח הקביל (pres_no, med_name), ולכן אין צורך להוסיף עוד סכמה. DBMS, Design
65
צורה נורמאלית 3NF תרגיל: פרק הסכמה הבאה ל-3NF כאשר נתון:
4 July 2007 צורה נורמאלית 3NF תרגיל: פרק הסכמה הבאה ל-3NF כאשר נתון: R(sid , sname , cno , cname, grade) F = {sid → sname, cno → cname, (sid , cno ) → grade} sid -- מס' סטודנט sname שם סטודנט cno מס' קורס Cname שם קורס Grade ציון DBMS, Design
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.