Presentation is loading. Please wait.

Presentation is loading. Please wait.

4 July 2007 נרמול מסד הנתונים כאשר מסד הנתונים עובר את שלב התכנון הראשוני יכולים להיווצר מספר בעיות בתכנון הנובעות מיתירות: אחת הבעיות הנפוצות ביותר במסדי.

Similar presentations


Presentation on theme: "4 July 2007 נרמול מסד הנתונים כאשר מסד הנתונים עובר את שלב התכנון הראשוני יכולים להיווצר מספר בעיות בתכנון הנובעות מיתירות: אחת הבעיות הנפוצות ביותר במסדי."— Presentation transcript:

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={AB, BC,AC} F={AB,BC} הן "שקולות", במובן ש- 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


Download ppt "4 July 2007 נרמול מסד הנתונים כאשר מסד הנתונים עובר את שלב התכנון הראשוני יכולים להיווצר מספר בעיות בתכנון הנובעות מיתירות: אחת הבעיות הנפוצות ביותר במסדי."

Similar presentations


Ads by Google