קשר של אחד לרבים במסד נתונים מתרחש כאשר לכל רשומה בטבלה A עשויות להיות רשומות מקושרות רבות בטבלה B, אך לכל רשומה בטבלה B עשויה להיות רק רשומה אחת מתאימה בטבלה A.
מערכת יחסים של אחד לרבים במסד נתונים הוא העיצוב הנפוץ ביותר של מסד נתונים יחסי והוא בלב של עיצוב טוב.
מסדי נתונים יכולים גם ליישם מערכת יחסים של אחד לאחד וקשר של רבים לרבים.
דוגמה למערכת יחסים של אחד לרבים
שקול את הקשר בין מורה לקורסים שהם מלמדים. מורה יכול ללמד כיתות מרובות, אבל לקורס לא יהיה אותו קשר עם המורה.
לכן, עבור כל רשומה בטבלת מורים, יכולות להיות רשומות רבות בטבלת הקורסים. דוגמה זו ממחישה מערכת יחסים של אחד לרבים: מורה אחד למספר קורסים.
למה חשוב ליצור מערכת יחסים של אחד לרבים
כדי לייצג מערכת יחסים של אחד לרבים, אתה צריך לפחות שתי טבלאות. בוא נראה למה.
דבקות בעיצוב הטופס הרגיל הראשון
אולי יצרנו טבלה שבה נרצה לרשום את השם והקורסים הנלמדים. אנו עשויים לעצב טבלת מורים וקורסים כך:
Teacher_ID | Teacher_Name | קורס |
---|---|---|
Teacher_001 | Carmen | ביולוגיה |
Teacher_002 | ורוניקה | מתמטיקה |
Teacher_003 | Jorge | אנגלית |
מה אם כרמן מלמדת שני קורסים או יותר? יש לנו שתי אפשרויות עם העיצוב הזה. נוכל להוסיף אותו לרשומה הקיימת של כרמן, כך:
Teacher_ID | Teacher_Name | קורס |
---|---|---|
Teacher_001 | Carmen | ביולוגיה, מתמטיקה |
Teacher_002 | ורוניקה | מתמטיקה |
Teacher_003 | Jorge | אנגלית |
עם זאת, העיצוב שלמעלה אינו גמיש ועלול לגרום לבעיות מאוחר יותר כאשר אתה מוסיף, עורך או מחיק נתונים. זה מקשה על חיפוש נתונים.
עיצוב זה מפר גם את העיקרון הראשון של נורמליזציה של מסד הנתונים, First Normal Form (1NF), הקובע שכל תא טבלה צריך להכיל פיסת נתונים בודדת ודיסקרטית.
The Second Form Normal Rule
חלופה עיצובית נוספת עשויה להיות הוספת שיא שני לכרמן:
Teacher_ID | Teacher_Name | קורס |
---|---|---|
Teacher_001 | Carmen | ביולוגיה |
Teacher_001 | Carmen | מתמטיקה |
Teacher_002 | ורוניקה | מתמטיקה |
Teacher_003 | Jorge | אנגלית |
גישה זו דבקה ב-1NF אך היא עדיין עיצוב לקוי של מסד נתונים מכיוון שהיא מציגה יתירות ועלולה לנפח מסד נתונים גדול שלא לצורך. חשוב מכך, הנתונים עלולים להפוך לבלתי עקביים.
לדוגמה, מה אם השם של כרמן ישתנה? מישהו שעובד עם הנתונים עלול לעדכן את שמה ברשומה אחת ולא לעדכן אותו ברשומה השנייה.
עיצוב זה מפר את תקן Second Normal Form (2NF), שמקפיד על 1NF ועליו להימנע גם מהיתירות של מספר רשומות. כלל 2NF משיג זאת על ידי הפרדת קבוצות משנה של נתונים לטבלאות מרובות ויצירת קשר ביניהן.
איך לעצב מסד נתונים עם מערכות יחסים של אחד לרבים
כדי ליישם מערכת יחסים של אחד לרבים בטבלת המורים והקורסים, חלק את הטבלאות לשניים וקשר אותן באמצעות מפתח זר.
כאן, הסרנו את עמודת הקורס בטבלת המורים:
Teacher_ID | Teacher_Name |
---|---|
Teacher_001 | Carmen |
Teacher_002 | ורוניקה |
Teacher_003 | Jorge |
והנה טבלת הקורסים. שימו לב שהמפתח הזר שלו, Teacher_ID, מקשר קורס למורה בטבלת המורים:
Course_ID | Course_Name | Teacher_ID |
---|---|---|
Course_001 | ביולוגיה | Teacher_001 |
Course_002 | מתמטיקה | Teacher_001 |
Course_003 | אנגלית | Teacher_003 |
פיתחנו מערכת יחסים בין המורים לטבלת הקורסים באמצעות מפתח זר. הסידור הזה אומר לנו שכרמן מלמדת גם ביולוגיה וגם מתמטיקה ושחורחה מלמד אנגלית.
אנו יכולים לראות כיצד עיצוב זה מונע כל פיטורים אפשריים, מאפשר למורים בודדים ללמד מספר קורסים, ומיישם מערכת יחסים של אחד לרבים.