Download presentation
Presentation is loading. Please wait.
1
אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות. הגדרה: תהי R סכמה רלציונית. פרוק של R הוא קבוצת סכמות = {R 1, …,R n } כך ש- i n =1 R i = R. תכונות חשובות: שימור מידע ושימור תלויות.
2
אביב-תשס"ה236363- DBMS, Design2 שימור מידע ושימור תלויות שימור מידע: אינטואיציה: נדרוש שהפרוק לא יאבד אינפורמציה, ונוכל לקבל בחזרה בדיוק את המידע שהיה לנו בטבלה המקורית ע"י צרוף תת-הטבלאות. אם הפרוק אינו משמר מידע, בדרך-כלל הצירוף ייתן רשומות מיותרות, שלא היו בטבלה המקורית. שימור תלויות: אינטואיציה: כאשר מעדכנים את מסד הנתונים, אם מוודאים שכל תת-טבלה בפני עצמה נשארת עקבית, אז מובטח שגם המסד כולו הוא עקבי (כלומר אינו מפר את התלויות הפונקציונליות).
3
אביב-תשס"ה236363- DBMS, Design3 פרוק - המשך כשמפרקים סכמה לתת סכמות, חיוני לדאוג לשימור מידע. שימור תלויות איננו הכרחי, אם כי רצוי. לעיתים צריך להתפשר בין שימור תלויות לבין מניעה של כפילויות מסוימות.
4
אביב-תשס"ה236363- DBMS, Design4 שימור מידע הגדרה: תהי R סכימה רלציונית, ותהי F קבוצת תלויות פונקציונלית, ויהי = {R 1, …,R n } פרוק של R. הוא משמר מידע בהינתן F אם לכל רלציה r מעל R המקיימת r F מתקיים : ⋈ i n = 1 R i (r) = r דוגמה: R(ID, NAME, ADDR), F = {ID NAME, ID ADDR} הפרוק = {R 1 (ID, NAME), R 2 (NAME, ADDR)} אינו משמר מידע. נראה תוכן של R שמפר את התנאי של שימור מידע:
5
אביב-תשס"ה236363- DBMS, Design5 דוגמה – המשך לעומת זאת, הפירוק ’ = {R 1 ’ (ID, NAME), R 2 ’ (ID, ADDR)} משמר מידע : R 1 ’ (r) ⋈ R 2 ’ (r) = r ADDRNAMEID ת"אראובן1 חיפהראובן2 ADDRNAME ת"אראובן חיפהראובן NAMEID ראובן1 2 ADDRNAMEID ת"אראובן1 חיפהראובן1 ת"אראובן2 חיפהראובן2 r = R 1 (r) R 2 (r) R 1 (r) ⋈ R 2 (r)
6
אביב-תשס"ה236363- DBMS, Design6 שימור מידע בפירוק לשתי סכמות משפט: פירוק לשתי סכמות = {R 1, R 2 } הוא משמר מידע אם ורק אם F (R 1 R 2 ) (R 1 \ R 2 ) או F (R 1 R 2 ) (R 2 \ R 1 ) בדוגמה האחרונה (עבור סכמה R(ID, NAME, ADDR)): הפירוק = {R 1 (ID, NAME), R 2 (NAME, ADDR)} לא מקיים NAME ID, וגם לא NAME ADDR, ולכן אינו משמר מידע. לעומת זאת, הפירוק = {R 1 (ID, NAME), R 2 (ID, ADDR)} כן מקיים (למשל) ID NAME, ולכן לפי המשפט, כן משמר מידע.
7
אביב-תשס"ה236363- DBMS, Design7 פרוק ליותר משתי תתי-סכמות פרוק של סכמה למספר תתי-סכמות הוא משמר מידע אם הוא מתבצע בשלבים, כאשר בכל שלב מתפרקת סכמה אחת לשתיים בפרוק משמר מידע: בהינתן סכמה R ותלות פונקציונלית X Y, נוכל לפרק את R לשתי תתי-סכמות: {R 1 [XY],R 2 [R\(Y\X)]}. לפי המשפט, מובטח שהפירוק משמר מידע. נחזור על הצעד הנ"ל מספר פעמים כרצוננו, ונקבל בסוף פרוק למספר תתי-סכמות שהוא משמר מידע.
8
אביב-תשס"ה236363- DBMS, Design8 דוגמה דוגמה: נתונה הסכמה R (ציונים של סטודנטים), וקבוצת תלויות F: R(snumber, sname, cnumber, cname, grade) F = {snumber sname, cnumber cname, (snumber, cnumber) grade} Snumber -- מס' סטודנט Sname -- שם סטודנט Cnumber -- מס' קורס Cname -- שם קורס Grade -- ציון מטרה: לפרק את R למספר סכמות, כך שהפירוק יהיה משמר מידע.
9
אביב-תשס"ה236363- DBMS, Design9 דוגמה - המשך R(snumber, sname, cnumber, cname, grade) R 2 (snumber, cnumber, cname, grade) R 4 (cnumber, cname)R 3 (snumber, cnumber, grade) R 1 (snumber, sname) snumber sname cnumber cname פירוק בשלבים: F = {snumber sname, cnumber cname, (snumber, cnumber) grade} לפי הבנייה, הפירוק ל- {R 1,R 3,R 4 } הוא משמר מידע.
10
אביב-תשס"ה236363- DBMS, Design10 פרוק משמר מידע - המשך אלגוריתם כללי לבדיקת שימור מידע בפירוק נתון (מס' תתי-סכמות כלשהו): 1. צור רלציה r מעל הסכמה R. לכל תת-סכמה R i נקצה ברלציה r שורה אחת t i t i מקבלת את הערך a לכל עמודה A R i ואת הערך b i לכל עמודה B R i. 2. כל עוד אין ב-r שורה שכולה ללא אינדקסים, ויש ב-r שתי שורות t i, t j כך ש- t i [X]=t j [X] עבור תלות פונקציונלית כלשהי (X Y) F, השווה את הערכים ב-t j [Y] וב-t i [Y], באופן הבא: לכל עמודה A Y, אם אחד משני הערכים t i [A], t j [A] הוא a (ללא אינדקס), החלף את הערך האחר ב-a, ואחרת החלף את t j [A] ב-t i [A] או את t i [A] ב-t j [A], כרצונך. 3. הפרוק משמר מידע אם ורק אם בסוף הריצה יש ב-r שורה שהיא כולה ערכים ללא אינדקסים.
11
אביב-תשס"ה236363- DBMS, Design11 דוגמה דוגמה: נתונה הסכמה R(A, B, C, D, E, F) וקבוצת תלויות F = {A B, C D, B EF}. האם הפירוק = {R 1 (A, B), R 2 (A, C, D), R 3 (B, E, F)} הוא משמר מידע? פתרון: נבנה את הרלציה r: FEDCBA f1f1 e1e1 d1d1 c1c1 ba f2f2 e2e2 dcb2b2 a fed3d3 c3c3 ba3a3 t1t1 t2t2 t3t3
12
אביב-תשס"ה236363- DBMS, Design12 דוגמה - המשך קיבלנו t 2 ללא אינדקסים, ולכן הפרוק משמר מידע. FEDCBA f1f1 e1e1 d1d1 c1c1 ba f2f2 e2e2 dcb2b2 a fed3d3 c3c3 ba3a3 t1t1 t2t2 t3t3 A B (t 1,t 2 ) B EF (t 3,t 2 ) FEDCBA f1f1 e1e1 d1d1 c1c1 ba f2f2 e2e2 dcba fed3d3 c3c3 ba3a3 t1t1 t2t2 t3t3 FEDCBA f1f1 e1e1 d1d1 c1c1 ba fedcba fed3d3 c3c3 ba3a3 t1t1 t2t2 t3t3 1 2
13
אביב-תשס"ה236363- DBMS, Design13 דוגמה נוספת דוגמה: נתון R(A,B,C,D,E), F = {A B, B C, C D, DE BC}. האם הפירוק = {R 1 (A,D), R 2 (A,E), R 3 (B,C,D,E)} הוא משמר מידע? EDCBA e1e1 dc1c1 b1b1 a ed2d2 c2c2 b2b2 a edcba3a3 t1t1 t2t2 t3t3 EDCBA e1e1 dc1c1 b1b1 a ed2d2 c1c1 b1b1 a edcba3a3 t1t1 t2t2 t3t3 EDCBA e1e1 dc1c1 b1b1 a ed2d2 c2c2 b1b1 a edcba3a3 t1t1 t2t2 t3t3 A B t 1,t 2 B C t 1,t 2 EDCBA e1e1 dc1c1 b1b1 a edc1c1 b1b1 a edcba3a3 t1t1 t2t2 t3t3 C D t 1,t 2 EDCBA e1e1 dc1c1 b1b1 a edcba edcba3a3 t1t1 t2t2 t3t3 DE BC t 3,t 2 מסקנה : הפירוק משמר מידע.
14
אביב-תשס"ה236363- DBMS, Design14 שימור תלויות אינטואיציה: כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה: כאשר מעדכנים את אחת מתתי-הרלציות באופן חוקי, גם העדכון על מסד הנתונים כולו (ה- join בין תת- הרלציות) הוא חוקי. אם אין שימור תלויות אז כאשר נעדכן טבלה אחת, נצטרך לבדוק מול הטבלאות האחרות כדי לוודא שהעדכון חוקי.
15
אביב-תשס"ה236363- DBMS, Design15 שימור תלויות – דוגמה דוגמה: נתונה הסכמה (עיר, קדומת, טלפון)R והתלויות הפונקציונליות {עיר (טלפון, קדומת), קדומת עיר} =F אותה קדומת יכולה להיות משותפת לכמה ערים, אך לכל עיר יש קדומת אחת בלבד. אותו מספר טלפון יכול להופיע בערים שונות, אך לא בערים עם אותה קדומת. שימור מידע: הפרוק {(עיר, קדומת)R 2, (עיר, טלפון)R 1 }= משמר מידע: R1 R2 = עיר, R2 \ R1 = קדומת, F עיר קדומת שאלה: האם הפירוק משמר תלויות?
16
אביב-תשס"ה236363- DBMS, Design16 דוגמה - המשך הפרוק אינו משמר תלויות, כי: כל אחת מהרלציות r 1, r 2 מקיימת את F. עירטלפון חיפה1234 טבעון1234 עירקדומת חיפה04 טבעון04 r1=r1=r2=r2=
17
אביב-תשס"ה236363- DBMS, Design17 דוגמה - המשך אבל ה-join אינו מקיים את F : כאשר נרצה להוסיף או לשנות מספר טלפון ב- r 1 נצטרך לבדוק גם ב- r 2 כדי לוודא שהשינוי הוא חוקי. לא די שבאותה עיר לא יהיו שני טלפונים זהים - אסור שיהיו טלפונים זהים גם בערים שונות באותו אזור חיוג. עירקדומתטלפון חיפה041234 טבעון041234
18
אביב-תשס"ה236363- DBMS, Design18 שימור תלויות – המשך אינטואיטיבית: תלות פונקציונלית f נשמרת בפרוק אם קיימת תת-סכמה שמכילה את כל האטריביוטים המופיעים ב- f, או אם ניתן להסיק את f מתוך תלויות אחרות שנשמרות בפרוק. הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונליות מעל R, ותהי S R. ההיטל של F על תת-הסכמה S (סימון : s F) הוא: s F = {X Y | X Y F + X Y S} יש לשים לב לכך שהתלויות בהיטל נלקחות מתוך F + ולא רק F.
19
אביב-תשס"ה236363- DBMS, Design19 שימור תלויות – המשך הגדרה: תהי R סכמה רלציונית, תהי F קבוצת תלויות פונקציונליות מעל R, ויהי = {R 1,…,R n }. הוא משמר תלויות (dependency preserving) בהינתן F אם לכל קבוצת רלציות {r 1,…,r n } (מעל הסכמות {R 1,…,R n } בהתאמה) כך ש-r i Ri F לכל i = 1,…,n מתקיים ⋈ n i=1 r i F.
20
אביב-תשס"ה236363- DBMS, Design20 אלגוריתם לבדיקת שימור תלויות בהינתן סכמה R, קבוצת תלויות פונקציונליות F ופרוק = {R 1, …,R n }, האלגוריתם הבא בודק האם משמר תלויות: For each f = ( X Y) in F do begin Z f X Repeat For i = 1 to n do Z f Z f ((Z f R i ) + F R i ) Until no more changes to Z f End is dependency-preserving iff Y Z f for each f in F. אינטואיציה: לכל תלות X Y, נבנה מעין "סגור" של X, באמצעות תלויות שכבר הראינו שהן נשמרות בפירוק, ונבדוק האם Y מוכל בו.
21
אביב-תשס"ה236363- DBMS, Design21 אלגוריתם לבדיקת שימור תלויות – דוגמה בפרוק {(עיר, קדומת) R 2, (עיר, טלפון){R 1 = , התלות עיר (טלפון, קדומת) = f אינה נשמרת: {טלפון, קדומת} = Z f דוגמה: נתונה הסכמה R(A, B, C, D), קבוצת תלויות F = {A B, AC D, BC D}. האם הפירוק = {R 1 (A, B), R 2 (B, C, D)} משמר תלויות? נבדוק לכל תלות האם היא נשמרת בפירוק. התלות A B נשמרת כי AB R 1, התלות BC D נשמרות כי BCD R 2 נותר לוודא שהתלות AC D נשמרת (לפי האלגוריתם): R 1,A B {AC} {ABC} R 2, BC D {ABCD} {D}
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.