Presentation is loading. Please wait.

Presentation is loading. Please wait.

אביב תשס"ה236363 - DBMS, צורות נורמליות1 צורות נורמליות: 3NF,BCNF צורה נורמלית (Normal Form) היא תכונה של סכמה רלציונית, המודדת את "טיב" הסכמה מבחינת מניעת.

Similar presentations


Presentation on theme: "אביב תשס"ה236363 - DBMS, צורות נורמליות1 צורות נורמליות: 3NF,BCNF צורה נורמלית (Normal Form) היא תכונה של סכמה רלציונית, המודדת את "טיב" הסכמה מבחינת מניעת."— Presentation transcript:

1 אביב תשס"ה236363 - DBMS, צורות נורמליות1 צורות נורמליות: 3NF,BCNF צורה נורמלית (Normal Form) היא תכונה של סכמה רלציונית, המודדת את "טיב" הסכמה מבחינת מניעת כפילויות. נלמד על שתי צורות נורמליות שונות: 3NF, BCNF.

2 אביב תשס"ה236363 - DBMS, צורות נורמליות2 צורה נורמלית – BCNF Boyce-Codd Normal Form מוטיבציה: תלות פונקציונלית במשהו שאיננו על-מפתח היא "דבר רע“. הגדרה: תהי R סכמה רלציונית, ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב-BCNF בהינתן F אם לכל תלות פונקציונלית לא טריוויאלית כך ש- X  Y  F +, X הוא על-מפתח של R. אם קיימת תלות לא טריוויאלית בקבוצת שדות שאיננה על-מפתח, תכנון הסכמות הרלציוניות הוא לקוי, ובמסד הנתונים עלולות להיווצר כפילויות.

3 אביב תשס"ה236363 - DBMS, צורות נורמליות3 BCNF – המשך דוגמה: נתונה קבוצת התלויות הפונקציונליות: {עיר  (טלפון, קידומת),קידומת  עיר} = F. הסכמה (עיר, קידומת, טלפון)R איננה ב-BCNF: הסבר: הסגור F + כולל את התלות הלא טריוויאלית קידומת  עיר, אבל עיר איננה על-מפתח. כפילויות במסד: למשל, הקידומת של חיפה (04) נשמרת במסד פעמים רבות, כמספר הטלפונים בחיפה. פירוק ל-BCNF: אם סכמה רלציונית אינה נמצאת בצורה הנורמלית הרצויה (למשל BCNF), אפשר לפרק אותה לתתי סכמות שנמצאות בצורה נורמלית זו.

4 אביב תשס"ה236363 - DBMS, צורות נורמליות4 פרוק ל-BCNF הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונליות מעל R, ויהי  = {R 1,…, R n } פרוק של R.  הוא פרוק ל-BCNF אם כל תת-סכמה R i היא ב- BCNF בהינתן  R i F. הערה: באופן דומה ניתן להגדיר פרוק לכל צורה נורמלית אחרת, למשל 3NF. משפט: תמיד קיים פרוק ל-BCNF שמשמר מידע, אך לא תמיד קיים פרוק ל-BCNF שמשמר תלויות.

5 אביב תשס"ה236363 - DBMS, צורות נורמליות5 פירוק ל-BCNF – המשך דוגמה: נתונה הסכמה (עיר, קידומת, טלפון)R וקבוצת התלויות הפונקציונליות: {עיר  (טלפון,קידומת), קידומת  עיר}=F. הפרוק {(עיר, קידומת)R 2,(עיר, טלפון)R 1 } =  הוא פרוק ל-BCNF. פרוק זה משמר מידע, אך כפי שראינו הוא איננו משמר תלויות. שימו לב: כל סכמה שיש בה שני אטריביוטים או פחות היא ב-BCNF, באופן טריוויאלי (למה?)

6 אביב תשס"ה236363 - DBMS, צורות נורמליות6 פירוק ל-BCNF – הערה(1) יש לשים לב כי בפירוק של סכמה רלאציונית R אנחנו בודקים אם הפרוק הוא ב-BCNF ע"י כך שבודקים שכל תת-סכמה R i היא ב-BCNF מעל  R i F (ההיטל מחושב מעל F + ). לא מספיק לבדוק האם R i מקיימת את תנאי ה- BCNF מעל קבוצת התלויות ב-F שמכילות תכונות ב-R i.

7 אביב תשס"ה236363 - DBMS, צורות נורמליות7 פירוק ל-BCNF – הערה(2) דוגמא: R=(A,B,C,D),  C, C  D} F={B,  = {(A,B,D), (B,C)} טענה: הפירוק איננו ב-BCNF. הסבר : R 1 ∉ BCNF כי D ∈  R 1 F  B אולם B איננו על - מפתח של R 1 אולם : אם היינו בודקים את R 1 מעל קבוצת התלויות ב -F שמכילות תכונות ב-R 1 ( אשר שווה לקבוצה ריקה ), אזי היינו מקבלים כי R 1 ∈ BCNF ( ההגדרה מתקיימת באופן ריק ). ההערה רלוונטית לכל צורה נורמאלית.

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

9 אביב תשס"ה236363 - DBMS, צורות נורמליות9 אלגוריתם לפרוק סכמה R ל-BCNF תהי F קבוצת תלויות פונקציונליות: 1. חשב את F +. 2. {R}  . 3. אם כל הסכמות ב-  הן ב-BCNF – עצור. 4. מצא סכמה S   שאינה ב-BCNF, כלומר שקיימת תלות פונקציונלית X  Y ב- F + כך ש-XY  S, Y  X ו- X אינו על-מפתח של S. בצע:   (  \ {S})  {S\(Y\X)}  {XY} 5. חזור ל-3. הפרוק שאלגוריתם זה מוצא הוא משמר מידע, אך לא בהכרח משמר תלויות.

10 אביב תשס"ה236363 - DBMS, צורות נורמליות10 פירוק ל-BCNF – דוגמה דוגמה: נתונה הסכמה R עבור מסד נתונים של בית חולים: R(dname, daddr, id, pname, paddr, pres_no, date, med_name, qnt) dname – שם של רופא (נניח שאין שני שני רופאים עם אותו שם) daddr – כתובת הרופא id – מס' זיהוי של חולה pname – שם החולה paddr – כתובת החולה pres_on – מס' מרשם date – תאריך מתן המרשם med_name – שם של תרופה המופיעה במרשם (באותו מרשם יכולות להופיע כמה תרופות שונות) qnt – כמות התרופה במרשם. נתונות התלויות הבאות: F= {dname  daddr, id  )pname,paddr,dname), pres_no  (date,id), (pres_no,med_name)  qnt}

11 אביב תשס"ה236363 - DBMS, צורות נורמליות11 דוגמה - המשך R איננה ב-BCNF, ולכן נפעיל את האלגוריתם: F= {dname  daddr, id  (pname,paddr,dname), pres_no  (date,id), (pres_no,med_name)  qnt} R(dname, daddr, id, pname, paddr, pres_no, date, med_name, qnt) (dname, id, pname, paddr, pres_no, date, med_name, qnt)(dname, daddr) (id, pname) (dname, id, paddr, pres_no, date, med_name, qnt) (dname, id, pres_no, date, med_name, qnt) (id, paddr) dname  daddr id  pname id  paddr

12 אביב תשס"ה236363 - DBMS, צורות נורמליות12 דוגמה - המשך (dname, id, pres_no, date, med_name, qnt) (id, pres_no, date, med_name, qnt)(dname, id) (pres_no, med_name, qnt)(pres_no, date, id) id  dname pres_no  date, id הפירוק של R (ל-BCNF, משמר מידע) הוא:  = {R 1 (dname,daddr), R 2 (id,pname), R 3 (id,paddr), R 4 (id,dname), R 5 (id,date,pres_no), R 6 (pres_no,med_name,qnt)}

13 אביב תשס"ה236363 - DBMS, צורות נורמליות13 צורה נורמלית שלישית - 3NF הגדרה: תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב-3NF בהינתן F אם לכל תלות פונקציונלית X  A (לא טריוויאלית) ב- F +, או ש-X הוא על-מפתח של R או ש-A שייך למפתח קביל של R. פרוק ל-3NF מוגדר באופן דומה לפרוק ל-BCNF. צורה נורמלית שלישית היא דרישה חלשה יותר מ-BCNF: כל סכמה שנמצאת ב-BCNF היא אוטומטית גם ב-3NF, אך ההפך אינו בהכרח נכון.

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

15 אביב תשס"ה236363 - DBMS, צורות נורמליות15 3NF - המשך BCNF מונעת יותר כפילויות בלתי רצויות מאשר 3NF. לא תמיד קיים פרוק משמר תלויות ל- BCNF, וגם אם קיים פרוק כזה, אין דרך קלה למצוא אותו. לעומת זאת, תמיד קיים פרוק ל-3NF שהוא משמר מידע ותלויות. יש אלגוריתם שמוצא פרוק משמר מידע ותלויות ל-3NF, אך כדי להשתמש בו יש להגדיר תחילה כיסוי מינימלי.

16 אביב תשס"ה236363 - DBMS, צורות נורמליות16 כיסוי מינימלי בקבוצת תלויות פונקציונליות עלול להיות "מידע מיותר". דוגמה: שתי הקבוצות F = {X  Y ⋃ Z}, G = {X  Y, X  Z} הן "שקולות", במובן ש- F + = G +. מטרה: להביא את כל הקבוצות השקולות של תלויות פונקציונליות לצורה אחידה. צורה זו נקראת הכיסוי המינימלי (minimal cover) של קבוצות התלויות.

17 אביב תשס"ה236363 - DBMS, צורות נורמליות17 כיסוי מינימלי - הגדרה הגדרה: תהי F קבוצת תלויות פונקציונליות. F היא מינימלית אם לכל תלות X  Y  F מתקיימות שלש הדרישות הבאות: 1. |Y| = 1 2. F +  (F \ {X  Y}) + – אין ב-F תלויות "מיותרות". 3. לכל Z  X מתקיים F +  (F \ {X  Y}  {Z  Y}) + – אין ב-F תלות A  X שבה X מכילה תכונות "מיותרות".

18 אביב תשס"ה236363 - DBMS, צורות נורמליות18 כיסוי מינימלי - המשך במקום לחשב את F + כדי לבדוק אם קבוצת תלויות F היא מינימלית, אפשר לבצע את הבדיקות הבאות: עבור תנאי 2: נבדוק ש- F’  X  Y (כאשר F’ = F\ {X  Y} ), או באופן שקול ש- Y  X + F’. עבור תנאי 3: נבדוק ש- F  (X \ B)  Y, או באופן שקול ש- Y  (X \ B) + F הגדרה: תהי F קבוצת תלויות פונקציונליות. כיסוי מינימלי (minimal cover) של F הוא קבוצת תלויות פונקציונליות F C כך ש-F C מינימלית ו- F + = F C +. הכיסוי המינימלי אינו בהכרח יחיד.

19 אביב תשס"ה236363 - DBMS, צורות נורמליות19 אלגוריתם למציאת כיסוי מינימלי תהי F קבוצת תלויות פונקציונליות: G  {(X  A) |  Y ((X  Y)  F  A  Y)}; Repeat 1. For each f = X  A  G do if A  X + G’ where G’ = G\ {f} then G  G’; 2. 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

20 אביב תשס"ה236363 - DBMS, צורות נורמליות20 מציאת כיסוי מינימלי - דוגמה נתון R(A,B,C,D), F={A  B, BC  A, ABC  D, D  A} יש למצוא את הכיסוי המינימאלי של F. בצעד ראשון נקבל G=F. נפעיל שלב 1 – אין שינוי נפעיל שלב 2 – נוריד A מ-  D ABC, מכיוון ש- D  ({A,B,C}\{A}) + G. קיבלנו: G={A  B, BC  A, BC  D, D  A} נפעיל שלב 1 – נוריד את התלות BC  A, מכיוון ש- A  BC + G’ (G’ = G\ {BC  A} ). קיבלנו: G={A  B, BC  D, D  A} אין יותר שינויים, ולכן G הנ"ל הוא כיסוי מינימאלי של F.

21 אביב תשס"ה236363 - DBMS, צורות נורמליות21 אלגוריתם לפרוק סכמה R ל-3NF בהינתן קבוצה מינימלית של תלויות פונקציונליות F: 1. אם קיימת ב-F תלות פונקציונלית שכוללת את כל התכונות ב-R, התשובה היא {R} - עצור. 2. לכל קבוצת תלויות פונקציונליות X  A n X  A 2,…, X  A 1, התלויות באותו X, צור סכמה } X  { A 1 A 2...A n. 3. אם אין אף סכמה המכילה מפתח קביל של R, הוסף סכמה שהיא מפתח קביל כלשהו של R. הפרוק שאלגוריתם זה מוצא הוא משמר מידע ותלויות.

22 אביב תשס"ה236363 - DBMS, צורות נורמליות22 פירוק ל-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} 1. לא קיימת ב-F תלות פונקציונלית המכילה את כל התכונות ב-R. 2. ניצור סכמות לפי התלויות הפונקציונליות: R 1 (dname, daddr) R 2 (id, pname, paddr, dname) R 3 (pres_no, date, id) R 4 (pres_no, med_name, qnt) 3. R4 כוללת את המפתח הקביל (pres_no, med_name), ולכן אין צורך להוסיף עוד סכמה.


Download ppt "אביב תשס"ה236363 - DBMS, צורות נורמליות1 צורות נורמליות: 3NF,BCNF צורה נורמלית (Normal Form) היא תכונה של סכמה רלציונית, המודדת את "טיב" הסכמה מבחינת מניעת."

Similar presentations


Ads by Google