Download presentation
Presentation is loading. Please wait.
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), ולכן אין צורך להוסיף עוד סכמה.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.