200 likes | 1.05k Views
תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF. מסדי נתונים. פירוק לתבניות בצורת BCNF. מעוניינים באלגוריתם יעיל (זמן ריצה פולינומיאלי) למציאת פירוק לתבניות בצורת BCNF מעוניינים שהפירוק יהיה חסר אובדן. טענות בסיס. טענה: כל סכימה שבה שתי תכונות בלבד היא בצורת BCNF מדוע?
E N D
תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF מסדי נתונים
פירוק לתבניות בצורת BCNF • מעוניינים באלגוריתם יעיל (זמן ריצה פולינומיאלי) למציאת פירוק לתבניות בצורת BCNF • מעוניינים שהפירוק יהיה חסר אובדן
טענות בסיס • טענה: כל סכימה שבה שתי תכונות בלבד היא בצורת BCNF • מדוע? • טענה: אם סכמה R אינה בצורת BCNF אזי קיימים שני אטריביוטים A ו-B ב-R, כך (R – AB)A • מדוע?
אלגוריתם הפירוק • הרעיון הכללי: • עבור תבנית R בודקים הפרה של צורת BCNF (איך?) • אם אין הפרה סיימנו, אחרת מפרקים את R לשתי תבניות • Z–A • ו- XA כך ש- • XA • ואין YX כך ש-YA
פרוצדורת הפירוק if Z contains no A and B such that A is in (Z-AB)+then return that Z is in BCNF and cannot be decomposed elsebegin find one such A and B; Y:=Z–B; while Y contains A and B such that A is in (Y-AB)+do Y:=Y–B; return the decomposition Z–A and Y; end
תוכנית הפירוק Z:=R; repeat decompose Z into Z–A and XA, where XA is in BCNF and XA; /* use the decomposition procedure */ add XA to the decomposition; Z:=Z–A; Until Z cannot be decomposed add Z to the decomposition
דוגמה • ניקח סכימה R=CTHRSG • C = course • T = teacher • H = hour • R = room • S = student • G = grade
התלויות שיתקיימו • C T Each course has one teacher • HR C Only one course can meet in a room at one time • HT R A teacher can be in only one room at one time • CS G Each student has one grade in each course • HS R A student can be in only one room at one time
הפעלת האלגוריתם • הסכימה CTHRSG • בודקים את הזוג CT: C(HRSG)+ • עבור C בתפקיד A ו-T בתפקיד B מתחילים הורדת אטריביוטים מיותרים מ- Y=CHRSG • A=C B=H לא ניתן להוריד אטריביוט • A=R B=C גורם להורדת C מקבלים Y=HRSG • ממשיכים עד לזוג A=R B=G ומקבלים Y=HRS • לא ניתן להמשיך לפרק את Y
הפעלת האלגוריתם • מוסיפים HRS לפירוק וממשיכים עם Z=CTHRSG – R • ממשיכים עם CTHSG: • עבור A=T B=H נשארים עם Y=CTSG • עבור A=T B=S נשארים עם Y=CTG • עבור A=T B=G משאיר Y=CT ואז Y בצורת BCNF • מוסיפים את CT לפירוק וממשיכים עם Z=CSHG
הפעלת האלגוריתם • ממשיכים עם CHSG • עבור A=G B=H משאיר Y=CSG • לא ניתן להמשיך להוריד אטריביוטים ומוסיפים CSG לפירוק • ממשיכים עם CHS • CHS בצורת BCNF כי לא ניתן למצוא זוג אטריביוטים שמראה אחרת
הפירוק לפי האלגוריתם • מקבלים את הסכימות • HRS, CT, CSG, CHS • האם יש שימור תלויות? • האם הפירוק הוא חסר אובדן?
בדיקת שימור תלויות • מעונינים לבדוק בצורה יעילה האם פירוק הוא משמר תלויות • נתונה סכימה R עם קבוצת תלויות F ופירוק של R: R1, …, Rn • נסמן ב- Fi את הצמצום של F ל- Ri (Fi = πRi(F)) • מעוניינים לדעת האם F+ = (Fi)+
בדיקת שימור תלויות • האם בעקבות הפירוק יכולה להתווסף תלות שלא היתה לפני הפירוק? • לבדיקת שימור התלויות: • לכל תלות XY בודקים האם (Fi)+ XY • בודקים על ידי חישוב X+ ביחס לתלויות הנשמרות בפירוק
הרחבה של קבוצת אטריביוטים בסכימה של הפירוק • עבור קבוצה Z של אטריביוטים וסכימה Ri ההרחבה של Z ביחס ל- Ri היא הקבוצה: Z ((Z Ri)+ Ri) • הסגור מחושב ביחס ל-F
בדיקת שימור תלות XY Z:=X while changes to Z occure do for i=1 to n do Z:= Z ((Z Ri)+ Ri) /* closure wrt F*/ if YZ return “yes” else return “no”
דוגמה • R=ABCD • F={AB, BC, CD, DA} • Decomposition {AB, BC, CD} • האם יש שימור תלויות?