אביב-תשס"ה236363- dbms, design1 פרוקים של רלציות מוטיבציה:...

21
ההה"ה- הההה236363- DBMS, Design 1 תתתתתת תת תתתתתת הההההההה : הההה הההה הההההה הההה ההההה הה ההה ההההה הההההההה. ההההה : הההR הההה הההההההה. הההה ההR ההה ההההה ההההה = {R 1 , …,R n } - הה ה i n =1 R i = R . הההההה הההההה : ההההה הההה הההההה הההההה.

Post on 21-Dec-2015

232 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 1

פרוקים של רלציות

פרוק סכמה לסכמות יותר קטנות על מוטיבציה :מנת למנוע כפילויות.

תהי הגדרה :R.סכמה רלציונית

כך = {R1, …,Rn} הוא קבוצת סכמות Rפרוק של iש-

n=1 Ri = R.

שימור מידע ושימור תלויות.תכונות חשובות :

Page 2: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 2

שימור מידע ושימור תלויות

:שימור מידענדרוש שהפרוק לא יאבד אינפורמציה, אינטואיציה :

ונוכל לקבל בחזרה בדיוק את המידע שהיה לנו בטבלה המקורית ע"י צרוף תת-הטבלאות.

אם הפרוק אינו משמר מידע, בדרך-כלל הצירוף ייתןרשומות מיותרות, שלא היו בטבלה המקורית.

:שימור תלויותכאשר מעדכנים את מסד הנתונים, אם אינטואיציה :

מוודאים שכל תת-טבלה בפני עצמה נשארת עקבית, אז מובטח שגם המסד כולו הוא עקבי )כלומר אינו מפר

את התלויות הפונקציונליות(.

Page 3: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 3

פרוק - המשך

כשמפרקים סכמה לתת סכמות, חיוני לדאוג לשימורמידע.

.שימור תלויות איננו הכרחי, אם כי רצוי לעיתים צריך להתפשר בין שימור תלויות לבין מניעה

של כפילויות מסוימות.

Page 4: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 4

שימור מידע

תהי הגדרה :R סכימה רלציונית, ותהי F קבוצת פרוק של = {R1, …,Rn}תלויות פונקציונלית, ויהי

R. משמר מידע בהינתן הואFאם לכל רלציה r

i⋈ מתקיים: r F המקיימת Rמעל n

= 1 Ri)r( = r

דוגמה:R)ID, NAME, ADDR(, F = {ID NAME, ID ADDR}

הפרוק = {R1)ID, NAME(, R2)NAME, ADDR(} אינו משמרמידע.

נראה תוכן שלR:שמפר את התנאי של שימור מידע

Page 5: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 5

דוגמה – המשך

לעומת זאת, הפירוק ’ = {R1’)ID, NAME(, R2

’)ID, ADDR(}

R1משמר מידע: ’)r( ⋈ R2

’)r( = r

IDNAMEADDR

ת"אראובן1

חיפהראובן2

NAMEADDR

ת"אראובן

חיפהראובן

IDNAME

ראובן1

ראובן2

IDNAMEADDR

ת"אראובן1

חיפהראובן1

ת"אראובן2

חיפהראובן2

r= R1(r) R2

(r)

R1(r) ⋈ R2

(r)

Page 6: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 6

שימור מידע בפירוק לשתי סכמות

פירוק לשתי סכמות משפט : = {R1, R2} הוא משמר מידע אם ורק אם

F )R1 R2( )R1 \ R2(

או

F )R1 R2( )R2 \ R1( עבור סכמה( בדוגמה האחרונהR)ID, NAME, ADDR(:)

הפירוק = {R1)ID, NAME(, R2)NAME, ADDR(} לא מקיים NAME ID וגם לא ,NAME ADDR.ולכן אינו משמר מידע ,

לעומת זאת, הפירוק = {R1)ID, NAME(, R2)ID, ADDR(} כן מקיים , ולכן לפי המשפט, כן משמר מידע.ID NAME)למשל(

Page 7: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 7

פרוק ליותר משתי תתי-סכמות

משמר מידעפרוק של סכמה למספר תתי-סכמות הוא אם הוא מתבצע בשלבים, כאשר בכל שלב מתפרקת

:משמר מידעסכמה אחת לשתיים בפרוק בהינתן סכמהR ותלות פונקציונלית X Y נוכל לפרק את ,R

. לפי המשפט, }R1[XY],R2[R\)Y\X(]{לשתי תתי-סכמות: מובטח שהפירוק משמר מידע.

נחזור על הצעד הנ"ל מספר פעמים כרצוננו, ונקבל בסוף פרוקלמספר תתי-סכמות שהוא משמר מידע.

Page 8: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 8

דוגמה

נתונה הסכמה דוגמה :R ציונים של סטודנטים(, וקבוצת תלויות( F:

R)snumber, sname, cnumber, cname, grade(F = {snumber sname, cnumber

cname, )snumber, cnumber( grade} Snumber -- מס' סטודנט Sname -- שם סטודנט Cnumber -- מס' קורס Cname -- שם קורס Grade -- ציון

לפרק את :מטרהR למספר סכמות, כך שהפירוק יהיה משמר מידע.

Page 9: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 9

דוגמה - המשך

R)snumber, sname, cnumber, cname, grade(

R2)snumber, cnumber, cname, grade(

R4)cnumber, cname(R3)snumber, cnumber, grade(

R1)snumber, sname(

snumber sname

cnumber cname

פירוק בשלבים:• F = {snumber sname, cnumber cname, )snumber, cnumber( grade}

הוא משמר מידע.}R1,R3,R4{לפי הבנייה, הפירוק ל- •

Page 10: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 10

פרוק משמר מידע - המשך

)מס' תתי-סכמות אלגוריתם כללי לבדיקת שימור מידע בפירוק נתוןכלשהו(:

.R מעל הסכמה rצור רלציה 1. לכל תת-סכמהRiנקצה ברלציה r שורה אחת titi מקבלת את הערך a לכל עמודה A Ri ואת הערך bi לכל

.BRiעמודה ,ti שתי שורות r שורה שכולה ללא אינדקסים, ויש ב-rכל עוד אין ב-•

tj -כך ש ti[X]=tj[X] עבור תלות פונקציונלית כלשהי (X Y ) F ,, באופן הבא:ti[Y] וב-tj[Y]השווה את הערכים ב-

לכל עמודהA Y אם אחד משני הערכים ,ti[A], tj[A] הוא a , ואחרת החלף a)ללא אינדקס(, החלף את הערך האחר ב-

, כרצונך.tj[A] ב-ti[A] או את ti[A] ב-tj[A]את שורה שהיא rהפרוק משמר מידע אם ורק אם בסוף הריצה יש ב-•

כולה ערכים ללא אינדקסים.

Page 11: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 11

דוגמה

נתונה הסכמה דוגמה :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(} הוא משמר מידע?

פתרון: נבנה את הרלציה r:ABCDEF

abc1d1e1f1

ab2cde2f2

a3bc3d3ef

t1

t2

t3

Page 12: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 12

דוגמה - המשך

קיבלנוt2 .ללא אינדקסים, ולכן הפרוק משמר מידע

ABCDEF

abc1d1e1f1

ab2cde2f2

a3bc3d3ef

t1

t2

t3

A B (t1,t2)

B EF (t3,t2)

ABCDEF

abc1d1e1f1

abcde2f2

a3bc3d3ef

t1

t2

t3ABCDEF

abc1d1e1f1

abcdef

a3bc3d3ef

t1

t2

t3

1

2

Page 13: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 13

דוגמה נוספת

נתון דוגמה :R)A,B,C,D,E(, F = {AB, BC, CD , DEBC} האם הפירוק . = {R1)A,D(, R2)A,E(, R3)B,C,D,E(}?הוא משמר מידע

ABCDE

ab1c1de1

ab2c2d2e

a3bcde

t1

t2

t3

ABCDE

ab1c1de1

ab1c1d2e

a3bcde

t1

t2

t3

ABCDE

ab1c1de1

ab1c2d2e

a3bcde

t1

t2

t3

ABt1,t2

BCt1,t2

ABCDE

ab1c1de1

ab1c1de

a3bcde

t1

t2

t3

CDt1,t2

ABCDE

ab1c1de1

abcde

a3bcde

t1

t2

t3

DEBCt3,t2

.מסקנה:• מידע משמר הפירוק

Page 14: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 14

שימור תלויות

כל תלות פונקציונלית שהתקיימה אינטואיציה :בסכמה המקורית מתקיימת גם בסכמה המפורקת.

כאשר מעדכנים את אחת מתתי-הרלציות מטרה :באופן חוקי, גם העדכון על מסד הנתונים כולו )ה-

join.בין תת-הרלציות( הוא חוקי אם אין שימור תלויות אז כאשר נעדכן טבלה אחת, נצטרך

לבדוק מול הטבלאות האחרות כדי לוודא שהעדכון חוקי.

Page 15: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 15

שימור תלויות – דוגמה

:דוגמה)נתונה הסכמה )עיר, קדומת, טלפוןR והתלויות

עיר} )טלפון, קדומת(, קדומת הפונקציונליות {עיר =F

אותה קדומת יכולה להיות משותפת לכמה ערים, אך לכל עיר יש קדומת אחת בלבד. אותו מספר טלפון יכול להופיע בערים שונות, אך לא בערים עם אותה קדומת.

)עיר, קדומת(} שימור מידע: הפרוקR2)עיר, טלפון( ,R1{ = :משמר מידע

R1 R2 = עיר, R2 \ R1 = קדומת, F עיר קדומת ?שאלה: האם הפירוק משמר תלויות

Page 16: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 16

דוגמה - המשך

:הפרוק אינו משמר תלויות, כי

כל אחת מהרלציותr1, r2 מקיימת את F.

עירטלפון

חיפה1234

טבעון1234

עירקדומת

חיפה04

טבעון04

r1= r2=

Page 17: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 17

דוגמה - המשך

-אבל הjoin אינו מקיים את F :

-כאשר נרצה להוסיף או לשנות מספר טלפון בr1 נצטרך כדי לוודא שהשינוי הוא חוקי.r2לבדוק גם ב-

לא די שבאותה עיר לא יהיו שני טלפונים זהים - אסור שיהיוטלפונים זהים גם בערים שונות באותו אזור חיוג.

עירקדומתטלפון

חיפה123404

טבעון123404

Page 18: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 18

שימור תלויות – המשך

תלות פונקציונלית אינטואיטיבית :f בפרוק נשמרת אם קיימת תת-סכמה שמכילה את כל האטריביוטים

מתוך f, או אם ניתן להסיק את fהמופיעים ב- תלויות אחרות שנשמרות בפרוק.

תהי הגדרה :R סכמה רלציונית, תהי F קבוצת היטל. הS R, ותהי Rתלויות פונקציונליות מעל

( הוא:sF )סימון: S על תת-הסכמה Fשל sF = {X Y | X Y F+ X Y S}

יש לשים לב לכך שהתלויות בהיטל נלקחות מתוךF+ ולא רקF.

Page 19: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 19

שימור תלויות – המשך

תהי הגדרה :R סכמה רלציונית, תהי F קבוצת

, = {R1, ויהי Rתלויות פונקציונליות מעל …,Rn}.

משמר תלויותהוא (dependency preserving ) )מעל }r1,…,rn{ אם לכל קבוצת רלציות Fבהינתן

ri RiFבהתאמה( כך ש-} R1,…,Rn {הסכמות

n ⋈ מתקייםi = 1,…,nלכל i=1 ri F.

Page 20: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 20

אלגוריתם לבדיקת שימור תלויות

בהינתן סכמהR קבוצת תלויות פונקציונליות ,Fופרוק = {R1, …,Rn} האלגוריתם הבא בודק האם ,:משמר תלויות

• For each f = ) X Y( in F do begin• Zf X• Repeat

• For i = 1 to n do• Zf Zf ))Zf Ri(+

F Ri(• Until no more changes to Zf

• End is dependency-preserving iff Y Zf for each f in F.

לכל תלות אינטואיציה :X Y נבנה מעין "סגור" של ,X ,באמצעות תלויות שכבר הראינו שהן נשמרות בפירוק, ונבדוק

מוכל בו.Yהאם

Page 21: אביב-תשס"ה236363- DBMS, Design1 פרוקים של רלציות מוטיבציה: פרוק סכמה לסכמות יותר קטנות על מנת למנוע כפילויות

אביב-תשס"ה 236363- DBMS, Design 21

אלגוריתם לבדיקת שימור תלויות – דוגמה

)עיר, קדומת(} בפרוקR2)עיר, טלפון( ,}R1 = התלות ,

Zf אינה נשמרת: {טלפון, קדומת} = f= )טלפון, קדומת( עיר

דוגמה: נתונה הסכמה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:)נשמרת )לפי האלגוריתם R1,AB{AC} {ABC} R2, BCD {ABCD}{D}