Presentation is loading. Please wait.

Presentation is loading. Please wait.

נרמול מסד הנתונים אביב July 2007

Similar presentations


Presentation on theme: "נרמול מסד הנתונים אביב July 2007"— Presentation transcript:

1 נרמול מסד הנתונים אביב 2007 4 July 2007
כאשר מסד הנתונים עובר את שלב התכנון הראשוני יכולים להיווצר מספר בעיות בתכנון,הנובעות מיתירות: אחת הבעיות הנפוצות ביותר במסדי נתונים רלציוניים, יתירות להתאפיין ביתירות של אחסון המידע,יתירות בשעת פעולות עדכון (לפעמים אנו נאלץ לעדכן יותר ממה שחשבנו). ע"י שימוש באילוצי העקביות אשר תלויים בסמנטיקה של האפליקציות ניתן להגדיר קבוצת תלויות פונקציונאליות ולהשתמש בטכניקת הפירוק (Decomposition) ע"מ לשפר (אולי) את התכנון. לצערנו, ישנם פירוקים הגורמים ליותר נזק מאשר תועלת ,למשל פירוקים שאינם משמרים תלויות או מידע. על כן ברצוננו למצוא את אותם פירוק שייהנו מתכונות "טובות" בשעת שיפור התכנון של המסד הראשוני. 4 July 2007

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 4 July 2007

3 4 July 2007 תלויות פונקציונאליות הערה 1: בהינתן r רלציה (מופע של R) ניתן לבדוק תמיד האם היא מקיימת FD כלשהי, אך מקרה הפוך אינו נכון. הערה 2: מתוך ההגדרה נובע כי מפתח K של רלציה מקיים: K→R K לא בהכרח מינימאלי. אם K מינימאלי אזי הוא מפתח קביל. 4 July 2007

4 4 July 2007 תלויות פונקציונאליות הגדרה: תהי R סכמה רלציונית, תהי r רלציה מעל הסכמה R , ותהי F קבוצה של תלויות פונקציונאליות מעל R. r מקיימת את F (סימון r╞ F) אם לכל תלות פונקציונאלית מתקיים: r╞ f. הגדרה: תהי R סכמה רלציונית, תהי r רלציה מעל הסכמה R, ותהי f תלות פונקציונאלית מעל R. f נובעת מ-F (סימון: f╞ F) אם לכל רלציה r מעל הסכמה R מתקיים: r╞ F⇒ r╞ f . 4 July 2007

5 4 July 2007 תלויות פונקציונאליות הגדרה: תהי F קבוצת תלויות פונקציונאליות. הסגור של F (סימון: F+) הוא: {X→Y | F╞ X→Y }. דוגמא: מצא קבוצת הסגור: F={A →B,B →C} , R(A,B,C) . ב F+ יהיו התלויות הפונקציונאליות הבאות: A →C, AB →C, AC →C, B →B, A →B, ∅ → ∅, C → ∅ כפי שאנו רואים, יש בסגור גם הרבה תלויות פונקציונאליות "לא מעניינות". 4 July 2007

6 4 July 2007 תלויות פונקציונאליות אקסיומות ארמסטרונג: אילו הן שלושה כללי היסק שעוזרים בחישוב F+ : רפלקסיביות: אם X⊆Y אז Y→X . הכללה: אם X →Y ו- Z⊆R אז 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 . 4 July 2007

7 תלויות פונקציונאליות תרגיל
4 July 2007 תלויות פונקציונאליות תרגיל נתון F={A →B,B →C} , R(A,B,C). הראו כי A →BC F ├ (כלומר ניתן להסיק). 4 July 2007

8 4 July 2007 תלויות פונקציונאליות הגדרה: תהי X קבוצת אטריבוטים ותהי F קבוצת תלויות פונקציונאליות. הסגור של X בהינתן F (סימון: X+F ) הוא: {A | F├ X→Y}. 4 July 2007

9 תלויות פונקציונאליות אלגוריתם לחישוב X+F : A ← X Repeat
4 July 2007 תלויות פונקציונאליות אלגוריתם לחישוב X+F : A ← X Repeat For each (Y→ Z) in F If Y⊆A then A←A⋃Z until no more changes to A. 4 July 2007

10 4 July 2007 תלויות פונקציונאליות תרגיל: נתון F={A →B,B →C} , R(A,B,C). חשבו את A+F. הערה: ניתן לשים לב ש-X הוא מפתח על של R אם X+F=R. 4 July 2007

11 4 July 2007 פירוק הגדרה: פירוק (decomposition) של R הוא קבוצת סכמות {R1, R2 ,.., Rn} ρ= כך ש- ⋃i=1..nRi=R . תכונות של הפירוק: שימור מידע (התכונה החיונית ) שימור תלויות. (איננו הכרחי , אם כי הוא רצוי.) כפי שנאמר לפעמים צריך לפרק סכמה רלציונית לכמה סכמות קטנות יותר כדי למנוע כפילויות. כאשר מפרקים סכמה רלציונית יש לשים לב לשתי תכונות של הפירוק: שימור מידע ושימור תלויות. התכונה החיונית היא שימור המידע. לעומת זאת, שימור תלויות איננו הכרחי , אם כי הוא רצוי. 4 July 2007

12 4 July 2007 שימור מידע הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונאליות , ויהי {R1, R2 ,.., Rn} ρ= פירוק של R. ρ הוא משמר מידע (lossless join) בהינתן F אם לכל רלציה r מעל R המקיימת r ╞ F מתקיים πRi(r)=r ⋈ i=1..n שימור מידע משמעו שהפירוק אינו מאבד אינפורמציה, ונוכל לקבל בחזרה בדיוק את מידע שהיה לנו בטבלה המקורית ע"י פעולות צירוף (join) בין תת הטבלאות. אם הפירוק אינו משמר מידע , בד"כ הצירוף ייתן רשומות מיותרות שלא היו בטבלה המקורית. 4 July 2007

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)} משמר מידע? 4 July 2007

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 שמקיים את התלויות אך הפירוק מפר את התנאי של שימור מידע 4 July 2007

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 4 July 2007

16 שימור מידע בפירוק לשתי סכמות
4 July 2007 שימור מידע בפירוק לשתי סכמות משפט: פירוק לשתי סכמות ρ = {R1, R2} הוא משמר מידע אם ורק אם F ⊧ (R1⋂R2) → (R1\ R2) או F ⊧ (R1⋂R2) → (R2\ R1) 4 July 2007

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 ולכן, לפי המשפט, כן משמר מידע. 4 July 2007

18 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע
4 July 2007 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע אתחול: צור רלציה r מעל הסכמה R. לכל תת-סכמה Ri נקצה ברלציה r שורה אחת ti ti מקבלת את הערך a לכל עמודה A∈Ri ואת הערך bi לכל עמודה B∉Ri. 4 July 2007

19 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע
4 July 2007 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע משמעות הצעד כל עוד אין ב-r שורה שכולה ללא אינדקסים, ויש ב-r שתי שורות ti, tj כך ש- ti[X]=tj[X] עבור תלות פונקציונלית כלשהי (X → Y) ∈ F, השווה את הערכים ב-tj[Y] וב-ti[Y], 4 July 2007

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], כרצונך. 4 July 2007

21 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע
4 July 2007 שימור מידע אלגוריתם לבדיקה אם פירוק משמר מידע תוצאה הפירוק משמר מידע אם ורק אם בסוף הריצה יש ב-r שורה שהיא כולה ערכים ללא אינדקסים 4 July 2007

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)} הוא משמר מידע? 4 July 2007

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 4 July 2007

24 שימור מידע - תרגיל A → B (t1,t2) B → EF (t3,t2) F E D C B A f1 e1 d1
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 (t3,t2) t3 קיבלנו t2 ללא אינדקסים, ולכן הפירוק משמר מידע. 4 July 2007

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 A→B t1,t2 t1 B→C t1,t2 t1 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 C→D t1,t2 t1 DE→BC t3,t2 t1 t2 t2 t3 t3 מסקנה: הפירוק משמר מידע. 4 July 2007

26 שימור תלויות אינטואיציה: אם כל אחת מתתי-רלציות ri (מעל הסכמות Ri) מספקת את πRiF אז מסד הנתונים כולו מספק את F. מטרה: כאשר מעדכנים את אחת מתתי-הרלציות באופן חוקי, גם העדכון על מסד הנתונים כולו (ה- join בין תתי-הרלציות) הוא חוקי. אם אין שימור תלויות אז כאשר נעדכן טבלה אחת, נצטרך לבדוק מול הטבלאות האחרות כדי לוודא שהעדכון חוקי. שימור תלויות איננו הכרחי, אם כי רצוי. אביב-תשס"ז DBMS, Design

27 שימור תלויות – דוגמה דוגמה:
4 July 2007 שימור תלויות – דוגמה דוגמה: נתון: (עיר, קדומת, טלפון)R {עיר  (טלפון, קדומת), קדומת  עיר} =F {(עיר, קדומת)R2, (עיר, טלפון)R1}= ρ משמר מידע: R1 ⋂ R2 = עיר, R2 \ R1 = קדומת, F ⊧ עיר  קידומת שאלה: האם הפירוק משמר תלויות? אותה קדומת יכולה להיות משותפת לכמה ערים, אך לכל עיר יש קדומת אחת בלבד. אותו מספר טלפון יכול להופיע בערים שונות, אך לא בערים עם אותה קדומת. 4 July 2007

28 שימור תלויות - דוגמה - המשך
4 July 2007 שימור תלויות - דוגמה - המשך הפירוק אינו משמר תלויות, כי: כל אחת מהרלציות r1, r2 מקיימת את F. r1= עיר טלפון חיפה 1234 טבעון r2= עיר קדומת חיפה 04 טבעון 4 July 2007

29 שימור תלויות - דוגמה - המשך
4 July 2007 שימור תלויות - דוגמה - המשך אבל ה-join אינו מקיים את F : כאשר נרצה להוסיף או לשנות מספר טלפון ב- r1 נצטרך לבדוק גם ב- r2 כדי לוודא שהשינוי הוא חוקי. לא די שבאותה עיר לא יהיו שני טלפונים זהים - אסור שיהיו טלפונים זהים גם בערים שונות באותו אזור חיוג. עיר קדומת טלפון חיפה 04 1234 טבעון 4 July 2007

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 }. בכדי להגדיר זאת פורמאלית יש להגדיר תחילה את המושג של היטל של קבוצת תלויות על תת-סכמה כלומר אותן תלויות שהן רלוונטיות לתת - הסכמה. 4 July 2007

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 4 July 2007

32 הפירוק הוא משמר תלויות בהינתן F אם F ⊆ (⋃ni =1 πRiF)+
4 July 2007 שימור תלויות הגדרה שקולה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונאליות מעל R, ויהי {R1, R2 ,.., Rn} ρ= פירוק של R. הפירוק הוא משמר תלויות בהינתן F אם F ⊆ (⋃ni =1 πRiF)+ אינטואיטיבית: תלות פונקציונלית f נשמרת בפירוק אם קיימת תת-סכמה שמכילה את כל האטריביוטים המופיעים ב- f, או אם ניתן להסיק את f מתוך תלויות אחרות שנשמרות בפירוק. 4 July 2007

33 שימור תלויות תלות פונקציונאלית f נשמרת בפירוק
4 July 2007 שימור תלויות תלות פונקציונאלית f נשמרת בפירוק אם קיימת תת-סכמה שמכילה את כל האטריבוטים המופיעים ב-f , או אם ניתן להסיק את f מתוך תלויות אחרות שנשמרות בפירוק. שימור תלויות משמעו שכאשר מעדכנים את מסד הנתונים, אם מוודאים שכל תת טבלה בפני עצמה נשארת עקבית אז מובטח שגם המסד כולו הוא עקבי (כלומר אינו מפר את התלויות הפונקציונאליות). תלות פונקציונאלית f נשמרת בפירוק אם קיימת תת-סכמה שמכילה את כל האטריבוטים המופיעים ב-f , או אם ניתן להסיק את f מתוך תלויות אחרות שנשמרות בפירוק. 4 July 2007

34 שימור תלויות אלגוריתם לבדיקת שימור תלויות
4 July 2007 שימור תלויות אלגוריתם לבדיקת שימור תלויות R סכמה רלציונית,F קבוצת תלויות פונקציונאליות מעל R, ו {R1, R2 ,.., Rn} ρ= פירוק של R. בהינתן סכמה R , קבוצת תלויות פונקציונאליות F ופירוק {R1, R2 ,.., Rn} ρ= , האלגוריתם הבא בודק האם הפירוק משמר תלויות: 4 July 2007

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)} 4 July 2007

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 נחשבת לצורה נורמאלית יותר חזקה. 4 July 2007

39 צורה נורמאליתBCNF – Boyce-Codd
4 July 2007 צורה נורמאליתBCNF – Boyce-Codd הגדרה: תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונאליות מעל R. אומרים ש-R היא ב-BCNF אם לכל תלות פונקציונאלית X → Y∈F+ כך ש- Y⊄X, X הוא מפתח-על של R. BCNF מבטאת את העובדה שתלות פונקציונאלית במשהו שאינו מפתח-על היא "דבר רע"; אם קיימת תלות לא טריוויאלית בקבוצת שדות שאיננה מפתח על אזי תכנון הסכמות הרלציוניות הוא לקוי, ובמסד עלולות להיווצר כפילויות. 4 July 2007

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). 4 July 2007

43 אלגוריתם יעיל למציאת כיסוי של πsF
4 July 2007 אלגוריתם יעיל למציאת כיסוי של π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, אלא כיסוי שלו (לאו דווקא מינימאלי). 4 July 2007

44 הפירוק שאלגוריתם זה מוצא הוא משמר מידע
4 July 2007 צורה נורמאלית BCNF אלגוריתם לפירוק סכמה R לBCNF (בהינתן קבוצת תלויות F) {R} ρ ← . אם כל הסכמות ב- ρ הן ב-BCNF – עצור. מצא סכמה S ∈ ρ שאינה ב-BCNF, כלומר שקיימת תלות פונקציונלית X→Y ∈ πsF כך ש-XY⊆ S, Y ⊈ X ו- X אינו על-מפתח של S. בצע: ρ ← (ρ \ {S}) ⋃ {S\(Y\X)} ⋃ {XY} חזור ל-3. הפירוק שאלגוריתם זה מוצא הוא משמר מידע אך לא בהכרח משמר תלויות. הפירוק שאלגוריתם זה מוצא הוא משמר מידע אך לא בהכרח משמר תלויות. 4 July 2007

45 צורה נורמאלית BCNF תרגיל: מהו פירוק BCNF?
4 July 2007 צורה נורמאלית BCNF תרגיל: מהו פירוק BCNF? נתונה הסכמה R (ציונים של סטודנטים), וקבוצת תלויות F: R(sid , sname , cno , cname, grade) F = {sid → sname, cno → cname, (sid , cno ) → grade} sid -- מס' סטודנט sname שם סטודנט cno מס' קורס Cname שם קורס Grade ציון 4 July 2007

46 דוגמה - המשך פירוק בשלבים: F = {snumber → sname, cnumber → cname, (snumber, cnumber) → grade} R(snumber, sname, cnumber, cname, grade) snumber → sname R2(snumber, cnumber, cname, grade) R1(snumber, sname) cnumber → cname R3(snumber, cnumber, grade) R4(cnumber, cname) לפי הבנייה, הפירוק ל- {R1,R3,R4} הוא משמר מידע וב-BCNF. אביב-תשס"ז DBMS, Design

47 פירוק ל-BCNF – הערה(1) יש לשים לב כי בפירוק של סכמה רלציונית R אנחנו בודקים אם הפירוק הוא ב-BCNF ע"י כך שבודקים שכל תת-סכמה Ri היא ב-BCNF מעל πRiF (ההיטל מחושב מעל F+). לא מספיק לבדוק האם Ri מקיימת את תנאי ה-BCNF מעל קבוצת התלויות ב-F שמכילות תכונות ב-Ri. ניתן לעשות בדיקה עבור πRiF ע"י כך שקודם מחשבים כיסוי של πRiF עם אלגוריתם יעיל ואז משתמשים במשפט המאפשר לבדוק שיוך ל-BCNF ישירות מהכיסוי. אביב-תשס"ז DBMS, Design

48 פירוק ל-BCNF – הערה(2) דוגמא:
R=(A,B,C,D), → C, C→ D} F={B, ρ = {(A,B,D), (B,C)} טענה: הפירוק איננו ב-BCNF. הסבר: R1∉BCNF כי D ∈ πR1F → B אולם B איננו על-מפתח של R1 אולם: אם היינו בודקים את R1 מעל קבוצת התלויות ב-F שמכילות תכונות ב-R1 (אשר שווה לקבוצה ריקה), אזי היינו מקבלים כי R1∈BCNF (ההגדרה מתקיימת באופן ריק). ההערה רלוונטית לכל צורה נורמאלית. אביב-תשס"ז DBMS, Design

49 צורה נורמאלית BCNF – Boyce-Codd
4 July 2007 צורה נורמאלית BCNF – Boyce-Codd תמיד קיים פירוק ל-BCNF שמשמר מידע , אך לא תמיד קיים פירוק ל-BCNF שמשמר תלויות. משפט: קיימים R סכמה רלציונית ו- F קבוצת תלויות פונקציונאליות מעל R עבורם לא קיים פירוק משמר מידע ומשמר תלויות ל-BCNF. 4 July 2007

50 BCNF ושימור תלויות הוכחה ע"י דוגמה:
4 July 2007 BCNF ושימור תלויות הוכחה ע"י דוגמה: עבור הסכמה (עיר, קידומת, טלפון)R וקבוצת התלויות {עיר→(טלפון,קידומת), קידומת→עיר}=F לא קיים פירוק BCNF, משמר מידע ומשמר תלויות. הסיבה: על מנת לשמר את התלות עיר→(טלפון,קידומת) כל שלושת האטריביוטים חייבים להופיע בסכמה אחת. 4 July 2007

51 BCNF לעומת שימור תלויות
קריטריון לבחירה: אופן השימוש הצפוי במסד הנתונים: הרבה עדכונים של שדה עם כפילויות בסכמה המקורית (החלפת קידומת של עיר) ⇐ פירוק ל-BCNF (מונע כפילויות): (עיר, קידומת)R2,(עיר, טלפון)R1. הרבה הוספות/עדכונים של שדות המופיעים בתלות שלא נשמרת בפירוק (למשל, מס' טלפון) ⇐ ללא פירוק (שימור תלויות): (עיר, קידומת, טלפון)R אלטרנטיבה אחרת: צורה נורמלית 3NF אביב-תשס"ז DBMS, Design

52 צורה נורמאלית 3NF הגדרה:
4 July 2007 צורה נורמאלית 3NF הגדרה: תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונאליות מעל R. R היא ב-3NF אם לכל תלות פונקציונאלית X→Y∈F+ כך ש- Y ⊈ X, X הוא מפתח על של R או Y מוכל במפתח קביל של R. 4 July 2007

53 דוגמה הסכמה (עיר, קידומת, טלפון) R בהינתן התלויות הפונקציונליות:
F {עיר→(טלפון,קידומת), קידומת→עיר}= נמצאת ב-.3NF הסיבה: המפתחות הקבילים של הסכמה הם (עיר, טלפון) ו- (קידומת,טלפון). כל תלות מתוך F מקיימת את תנאי ה-3NF. לפי המשפט מספיק לבדוק רק את התלויות של F. אביב-תשס"ז DBMS, Design

54 צורות נורמאליות תמיד מתקיים: כל סכמה שהיא ב-BCNF היא גם ב-3NF
4 July 2007 צורות נורמאליות תמיד מתקיים: כל סכמה שהיא ב-BCNF היא גם ב-3NF ההפך לא בהכרח BCNF מונעת יותר כפילויות בלתי רצויות מאשר 3NF תמיד קיים פירוק ל-3NF שהוא משמר מידע ותלויות פירוק ל-3NF מוגדר באופן דומה לפירוק ל-BCNF. 4 July 2007

55 הפירוק שאלגוריתם זה מוצא הוא משמר ומידע ותלויות.
4 July 2007 אלגוריתם לפירוק סכמה R ל3NF (בהינתן קבוצה מינימאלית של תלויות פונקציונאליות F ) אם קיימת ב-F תלות פונקציונאלית שכוללת את כל התכונות ב-R, התשובה היא {R} ועצור. לכל קבוצת תלויות פונקציונאליות X→A1,X→A2,…,X→An התלויות באותו X, צור סכמה: XA1A2…An. אם אין אף סכמה המכילה מפתח קביל של R, הוסף סכמה שהיא מפתח קביל כלשהו של R. הפירוק שאלגוריתם זה מוצא הוא משמר ומידע ותלויות. 4 July 2007

56 אלגוריתם לפירוק סכמה R ל-3NF
אם קיימת ב-F תלות פונקציונלית שכוללת את כל התכונות ב-R, התשובה היא {R} - עצור. לכל קבוצת תלויות פונקציונליות X → An X → A2,…, X → A1, התלויות באותו X, צור סכמה } X ⋃ { A1A2 ...An. אם אין אף סכמה המכילה מפתח קביל של R, הוסף סכמה שהיא מפתח קביל כלשהו של R. הפירוק שאלגוריתם זה מוצא הוא משמר ומידע ותלויות. אביב-תשס"ז DBMS, Design

57 צורה נורמאלית 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 ציון 4 July 2007

58 צורה נורמאלית 3NF תרגיל: פרק הסכמה הבאה ל-3NF כאשר נתון:
4 July 2007 צורה נורמאלית 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} 4 July 2007

59 פירוק ל-3NF – דוגמה פתרון R1(dname, daddr) R2(id, pname, paddr, dname)
4 July 2007 פירוק ל-3NF – דוגמה פתרון לא קיימת ב-F תלות פונקציונלית המכילה את כל התכונות ב-R. ניצור סכמות לפי התלויות הפונקציונליות: R1(dname, daddr) R2(id, pname, paddr, dname) R3(pres_no, date, id) R4(pres_no, med_name, qnt) R4 כוללת את המפתח הקביל (pres_no, med_name), ולכן אין צורך להוסיף עוד סכמה. 4 July 2007


Download ppt "נרמול מסד הנתונים אביב July 2007"

Similar presentations


Ads by Google