290 likes | 538 Views
תיאוריית תכנון סכמות למסדי נתונים יחסיים חלק 2. Design Theory for Relational Databases Part 2. חזרה על מושג הגרירה. ת"פ X → Y מתקיימת ביחס r אם כל שתי רשומות ששוות על X הנן שוות גם על Y קבוצת ת"פ F גוררת ת"פ X → Y אם כל יחס שמקיים את F מקיים גם את X → Y
E N D
תיאוריית תכנון סכמות למסדי נתונים יחסייםחלק 2 Design Theory for Relational Databases Part 2
חזרה על מושג הגרירה • ת"פ X → Yמתקיימת ביחס r אם כל שתי רשומות ששוות על X הנן שוות גם על Y • קבוצת ת"פ Fגוררת ת"פ X → Y אם כל יחס שמקיים את F מקיים גם את X → Y • הסימון של גרירה: F ⊨ X → Y • אם אין גרירה, אז יש דוגמה נגדית, כלומר יחס שמקיים את F ואינו מקיים את X → Y
דוגמה של דוגמה נגדית • היחס • הוא דוגמה נגדית לגרירה A → B, B → C ⊨ C → A
עוד דוגמה של דוגמה נגדית • היחס • הוא דוגמה נגדית לגרירה A → B, C → B ⊨ C → A
השימושים של ת"פ • ת"פ מבטאות אילוצים (constraints) • צריך לדאוג לכך שהנתונים האגורים במסד הנתונים יקיימו את האילוצים • בנוסף לכך, הת"פ (וגם אילוצים מסוגים אחרים) מאפשרות לזהות סכמות בעייתיות
סכמה המאפשרת שכפול מידע הנה סכמה בעייתית • דוגמה • למחלקה יש רק מנהל אחד אבל יש הרבה סטודנטים • לכן המידע על מנהל המחלקה נשמר עבור כל סטודנט השייך למחלקה Student Department Head
מדוע קיים שכפול מידע? • למחלקה יש רק מנהל אחד אבל יש הרבה סטודנטים • כלומר, הת"פ D → H מתקיימת, אבל הת"פ D → S אינה מתקיימת Student Department Head
במילים אחרות... • בדוגמה הקודמת מקור הבעיה הוא הת"פ D → H • זוהי ת"פ שאמורה להתקיים ביחס, אבל צידה השמאלי איננו מפתח של היחס (כלומר, D אינו קובע את כל שאר האטריביוטים, אלא רק את H)
מדוע חשוב לדעת מתי יש גרירה? • נתונה לנו סכמה R, קרי קבוצת אטריביוטים • ונתונה קבוצה של ת"פ F שהיחסים האפשריים עבור R צריכים לקיים • האם היחסים עבור R מקיימים ת"פ X → Y לא טריוויאלית, שצידה השמאלי אינו קובע את כל האטריביוטים של R? אם כן, הסכמה בעייתית • באופן פורמלי, האם קיימים X ו- Yכך ש- Y ⊊ X,F ⊨ X → Y ו- F ⊭ X → R
הגדרה של מפתח ומפתח-על • בעזרת המושג של גרירה ניתן להגדיר באופן פורמלי מפתח (key) ומפתח-על (superkey) • בהינתן סכמה R וקבוצת ת"פ F, מפתח-על של R הוא קבוצת אטריביוטים X ⊆ R, כך ש- F ⊨ X → R • X הוא מפתחאם F ⊨ X → R ואם אין Z ⊊ X כך ש- F ⊨ Z → R • מפתח הוא גם מפתח-על, אבל לא להפך
אפיון סכמה בעייתית (שנית) • נתונה לנו סכמה R, קרי קבוצת אטריביוטים • ונתונה קבוצה של ת"פ F שהיחסים עבור R צריכים לקיים • הסכמה בעייתית אם קימת ת"פ X → Y לא טריוויאלית (קרי, Y ⊊ X) כך ש- • F ⊨ X → Y • ו- X אינו מפתח-על
דוגמה :1 סכמה בעייתית • היחסים עבור הסכמה SDH מקיימים שתי ת"פ D → H ו- S → D • S → D, D → H ⊭ D → S • לכן D אינו מפתח-על של הסכמה Student Department Head
דוגמה :2 סכמה בעייתית נוספת • עבור הסכמה SCT קיימת הת"פ C → T • C אינו מפתח, כי C → T ⊭ C → S Student Course Teacher
איך נבדוק מתי יש גרירה? • יש גרירה F ⊨ X → Y אם אין דוגמה נגדית • לפיכך, נחפש דוגמה נגדית • יש אינסוף יחסים אפשריים עבור סכמה נתונה (בהנחה שהתחום של הערכים המופיעים בעמודות הנו אינסופי) • לפיכך, חיפוש דוגמה נגדית הוא תהליך שאיננו בהכרח עוצר
האקסיומות של ארמסטרונג • רפלקסיביות: אם אז • אוגמנטציה (הוספה): אם אז • טרנזיטיביות: אם ו- אז
אקסיומות נוספות • איחוד: אם ו- , אז • פירוק: אם , אז וגם • פסודו-טרנזיטיביות: אם ו- , אז
גזירה של ת"פ • בהינתן קבוצה F של ת"פ, ניתן לגזור מהן ת"פ נוספות בעזרת האקסיומות, לדוגמה תהי: • להלן גזירה של מ- F 1. (נתון ב- F) 2. (אוגמנטציה של 1 עם AB) 3. (נתון ב- F) 4. (אוגמנטציה של 3 עם ABC) 5. (טרנזיטיביות של 2 ו- 4)
הגדרה של גזירה • גזירה של ת"פ מקבוצה Fשל ת"פ היא סדרה סופית של ת"פ, שמקיימת את שני הדברים הבאים: • כל ת"פ בסדרה שייכת ל- F, נובעת מרפלקסיביות או נובעת מת"פ קודמות בסדרה, לפי אוגמנטציה או טרנזיטיביות • בנוסף, הסדרה מסתיימת בת"פ
נאותות ושלמות של האקסיומות • F ⊢ X → Y פירושו שיש גזירה של X → Y מ- F • F ⊨ X → Y פירושו שיש גרירה של X → Y מ- F • האקסיומות של ארמסטרונג הנן נאותות ושלמות, כלומר F ⊨ X → Y ⇔ F ⊢ X → Y
איך נבדוק האם יש גזירה? • המושגים של גרירה וגזירה הנם שקולים, ולכן במקום לבדוק האם יש גרירה אפשר לבדוק האם יש גזירה • יש מספר סופי של ת"פ שניתן לרשום בעזרת קבוצה סופית של אטריביוטים • ולכן, בהינתן קבוצה של ת"פ, יש מספר סופי של גזירות (בגזירה אין צורך לחזור על אותה ת"פ פעמיים)
אלגוריתם לבדיקה F ⊢ X → Y • נייצר את כל הסדרות האפשריות (ללא חזרות) של ת"פ, תוך שימוש באטריביוטים המופיעים ב- F • נבדוק עבור כל סדרה האם היא גזירה של X → Y מ- F • עדיין יש מספר אקספוננציאלי של גזירות אפשריות
סגור של קבוצת אטריביוטים • הסגור של קבוצת אטריביוטים ביחס לקבוצת ת"פ , סימון , הוא כלומר, קבוצת כל האטריביוטים כך שניתן לגזור את מ- • אם ברור מההקשר, אז מסמנים
הלמה של הסגור • למה: גזיר מ- אם ורק אם • הוכחה: הלמה נובעת מההגדרה של הסגור ומהאקסיומות של האיחוד והפירוק.
דוגמה 3 • F = {A → C, B → D, DE → H, DK → G} • נבדוק האם F ⊢ ABK → HG ע"י חישוב הסגור (ABK)+ • אם הצד השמאלי של ת"פ מוכל בסגור, אז גם הצד הימני מוכל בסגור • נתחיל עם ABK • בגלל A → C נוסיף את C לסגור, ונקבל ABKC
דוגמה 3 (המשך) • F = {A → C, B → D, DE → H, DK → G} • נתחיל עם ABK • בגלל A → C נוסיף את C לסגור, ונקבל ABKC • בגלל B → D נוסיף את D לסגור, ונקבל ABKCD • בגלל DK → G נוסיף את G לסגור, ונקבל ABKCDG
דוגמה 3 (המשך) • אין ב- F אף ת"פ נוספת שצידה השמאלי מוכל בסגור, אבל צידה הימני עדיין אינו מוכל בסגור • לפיכך, הסגור הוא ABKCDG • מסקנה: הת"פ ABK → G נגזרת מ- F, אבל ABK → H איננה נגזרת מ- F • לכן, ABK → HG איננה נגזרת מ- F
אלגוריתם לחישוב הסגור • נתונה קבוצה של ת"פ F וקבוצת אטריביוטים X ורוצים לחשב את X+ • V:=X • כל זמן שיש ב- F ת"פ Y → Z, כך ש- Y ⊆ V, אז מוסיפים את Z ל- V, כלומר V := V ∪ Z • זמן ריצה ריבועי • בעזרת מבנה נתונים מתאים, זמן ריצה לינארי
הוכחת נכונות של האלגוריתם • ראשית מראים שהאלגוריתם נאות, כלומר אם האלגוריתם מוסיף אטריביוט A לסגור, אז F ⊢ X → A • מראים זאת באינדוקציה על מספר האיטרציה שבה מתווסף A לסגור, תוך שימוש באקסיומות
הוכחת נכונות (המשך) • הוכחה סינטקטית • מראים שאם יש גזירה של X → Y מ-F אז האלגוריתם מוסיף את כל האטריביוטים של Y לסגור • ההוכחה באינדוקציה על אורך הגזירה • הוכחה סמנטית • מראים שאם בסיום האלגוריתם, Y אינו מוכל בסגור, אז יש דוגמה נגדית לגרירה F ⊨ X → Y