ברוכים הבאים ליחידת הלימוד על תכנון מסדי נתונים, מודל הישויות-קשר (ER) ונורמליזציה. יחידה זו היא אבן יסוד בהבנת האופן שבו אנו מעצבים ומבנים מסדי נתונים יעילים, עקביים וללא כפילויות. נלמד את השלבים השונים בתהליך התכנון, החל מהרמה הקונספטואלית ועד לרמה הלוגית, תוך שימוש בכלים וטכניקות מרכזיות הנדרשות לכל מפתח או מנהל מסדי נתונים.
תהליך תכנון מסדי נתונים
תכנון מסד נתונים הוא תהליך שיטתי שמטרתו ליצור סכימה של מסד נתונים העונה על דרישות המשתמשים, תוך שמירה על עקביות, יעילות ומינימום כפילויות. התהליך מחולק לשלושה שלבים עיקריים:
תכנון קונספטואלי (Conceptual Design)
בשלב זה אנו מנתחים את דרישות המערכת ויוצרים מודל ברמה גבוהה, בלתי תלוי בטכנולוגיה ספציפית. המודל הנפוץ ביותר בשלב זה הוא מודל הישויות-קשר (ER).
מודל ישויות-קשר (ER): מודל גרפי המייצג את הישויות הרלוונטיות במערכת, את התכונות שלהן ואת הקשרים ביניהן.תכנון לוגי (Logical Design)
בשלב זה אנו ממירים את המודל הקונספטואלי למודל נתונים ספציפי (לרוב, המודל הרלציוני). כאן אנו מגדירים את הטבלאות, העמודות, המפתחות והקשרים ביניהן. שלב זה כולל גם תהליך נורמליזציה.
מודל רלציוני: מודל נתונים המבוסס על טבלאות (יחסים), כאשר כל טבלה מכילה שורות (רשומות) ועמודות (תכונות).תכנון פיזי (Physical Design)
בשלב זה אנו מתאימים את המודל הלוגי למערכת ניהול מסד נתונים (DBMS) ספציפית, וקובעים פרטים כמו מבני אחסון, אינדקסים, ושיקולי ביצועים.
מודל הישויות-קשר (ER) והמרתו למודל רלציוני
מודל ER הוא כלי עוצמתי לתכנון קונספטואלי. הוא מאפשר לנו לייצג את העולם האמיתי בצורה מובנית וברורה.
מרכיבי מודל ER
ישות (Entity): אובייקט או מושג בעל קיום עצמאי ומשמעות במערכת (לדוגמה: סטודנט, קורס).תכונה (Attribute): מאפיין של ישות או קשר (לדוגמה: שם סטודנט, מספר קורס).קשר (Relationship): אסוציאציה בין שתי ישויות או יותר (לדוגמה: סטודנט נרשם ל קורס).סוגי קשרים וריבוי (Cardinality)
קשרים מתוארים באמצעות ריבוי, המציין כמה מופעים של ישות אחת יכולים להיות קשורים לכמה מופעים של ישות אחרת:
- אחד לאחד (1:1): מופע אחד של ישות א' קשור למופע אחד לכל היותר של ישות ב'.
- אחד לרבים (1:N): מופע אחד של ישות א' קשור למופעים רבים של ישות ב'.
- רבים לרבים (M:N): מופעים רבים של ישות א' קשורים למופעים רבים של ישות ב'.
השתתפות (Participation)
מציינת האם כל מופע של ישות חייב להשתתף בקשר (השתתפות מלאה) או יכול שלא להשתתף (השתתפות חלקית).
המרת מודל ER למודל רלציוני
זהו שלב קריטי בתכנון הלוגי. כל ישות הופכת לטבלה, תכונות הופכות לעמודות, ומפתחות ראשיים וזרים מוגדרים כדי לשמר את הקשרים. קשרי M:N לרוב הופכים לטבלה נפרדת.
נורמליזציה: אופטימיזציה של סכימת מסד הנתונים
נורמליזציה היא תהליך של ארגון עמודות וטבלאות במסד נתונים רלציוני כדי למזער כפילויות ולהבטיח תקינות נתונים. היא מתבצעת באמצעות פירוק טבלאות גדולות לטבלאות קטנות יותר, תוך הסתמכות על תלויות פונקציונליות.
צורה נורמלית ראשונה (1NF)
כל התכונות חייבות להיות אטומיות (בלתי ניתנות לחלוקה נוספת) ואין קבוצות חוזרות בטבלה.
צורה נורמלית שנייה (2NF)
חייבת להיות ב-1NF, וכל תכונה שאינה חלק ממפתח ראשי חייבת להיות תלויה פונקציונלית במפתח הראשי כולו (ולא רק בחלק ממנו).
צורה נורמלית שלישית (3NF)
חייבת להיות ב-2NF, ואין תלויות טרנזיטיביות (כלומר, תכונה שאינה מפתח לא תלויה בתכונה שאינה מפתח אחרת).
צורה נורמלית של בויס-קוד (BCNF)
צורה חזקה יותר מ-3NF. לכל תלות פונקציונלית X -> Y, X חייב להיות מפתח-על (superkey).
שאלות לדיון
- נתחו את תהליך תכנון מסד נתונים עבור מערכת לניהול ספרייה, החל מהשלב הקונספטואלי ועד לשלב הלוגי. אילו ישויות, תכונות וקשרים מרכזיים הייתם מזהים?
- בהינתן טבלה עם הסכימה
R(A, B, C, D, E)וקבוצת התלויות הפונקציונליות{A -> B, BC -> D, A -> C, D -> E}, קבעו מהו המפתח הראשי של הטבלה. - האם הטבלה
Rמהשאלה הקודמת נמצאת ב-3NF? אם לא, פרקו אותה לצורות נורמליות גבוהות יותר (עד BCNF) והסבירו כל שלב בפירוק.
נקודות לתשובת מודל
- תכנון ספרייה: זיהוי ישויות (ספר, קורא, השאלה, סופר), תכונות רלוונטיות (כותר, שם קורא, תאריך השאלה), וקשרים (ספר נכתב ע"י סופר - M:N, קורא משאיל ספר - M:N). המרה לטבלאות רלציוניות תוך טיפול בקשרי M:N באמצעות טבלאות ביניים.
- מפתח ראשי: יש למצוא את הסגור של כל קבוצת תכונות פוטנציאלית. במקרה זה,
A+ = {A, B, C, D, E}, ולכןAהוא מפתח ראשי (ומפתח-על). - נורמליזציה:
- הטבלה ב-1NF (בהנחה שכל התכונות אטומיות).
- בדיקת 2NF: מכיוון שהמפתח הראשי הוא תכונה בודדת (A), אין תלויות חלקיות, ולכן הטבלה ב-2NF.
- בדיקת 3NF: יש תלות טרנזיטיבית
A -> Cו-C -> D(דרךBC -> D, אם נניח ש-C קובע את D באופן חלקי). כמו כן,A -> Dו-D -> E, מה שיוצר תלות טרנזיטיביתA -> E. יש לפרק אתRלטבלאותR1(A, B, C)ו-R2(C, D, E), אוR1(A, B, C),R2(C, D),R3(D, E). - בדיקת BCNF: לאחר הפירוק ל-3NF, יש לבדוק שוב שכל צד שמאל של FD הוא מפתח-על בטבלה המתאימה. לדוגמה, אם פרקנו ל-
R1(A, B, C)עםA -> B, A -> C, אזAהוא מפתח-על ב-R1. אם פרקנו ל-R2(C, D)עםBC -> D(אוC -> Dאם נניח ש-C מספיק), יש לוודא ש-CאוBCהוא מפתח-על ב-R2.