קשר אחד לרבים במסד נתונים מתרחש כאשר לכל רשומה בטבלה A יש רשומות מקושרות רבות בטבלה ב ', אך לכל רשומה בטבלה ב' יש רק רישום מקביל אחד בטבלה א '. יחס אחד לרבים ב- מסד נתונים הוא העיצוב הנפוץ ביותר למסדי נתונים יחסיים והוא בלב של עיצוב טוב.
חשוב על היחסים בין מורה לבין הקורסים שהם מלמדים. מורה יכול ללמד קורסים מרובים, אבל כמובן לא היה את אותה מערכת יחסים עם המורה.
לכן, עבור כל רשומה בטבלה מורים, יכול להיות שיש רשומות רבות בטבלה קורסים. זהו יחס של אחד לרבים: מורה אחד למספר קורסים.
מדוע הקמת מערכת יחסים אחת לרבים חשובה
כדי לייצג יחסים של אחד לרבים, אתה צריך לפחות שתי טבלאות. בואו נראה למה.
אולי יצרנו שולחן שבו רצינו להקליט את השם ואת הקורסים לימד. אנו עשויים לעצב את זה כך:
Teacher_ID | שם המורה | כמובן |
---|---|---|
המורה | כרמן | ביולוגיה |
המורה | ורוניקה | מתמטיקה |
המורה | חורחה | אנגלית |
מה אם כרמן מלמדת שני קורסים או יותר? יש לנו שתי אפשרויות עם עיצוב זה. אנחנו יכולים פשוט להוסיף אותו לרשומה הקיימת של כרמן, כך:
Teacher_ID | מורהשם | כמובן |
---|---|---|
המורה | כרמן | ביולוגיה, מתמטיקה |
המורה | ורוניקה | מתמטיקה |
המורה | חורחה | אנגלית |
העיצוב לעיל, לעומת זאת, הוא גמיש ויכול לגרום לבעיות מאוחר יותר כאשר מנסים להוסיף, לערוך או למחוק נתונים.
זה מקשה על חיפוש נתונים. עיצוב זה מפר את העקרון הראשון של נורמליזציה של מסד הנתונים, טופס ראשון רגיל (1NF), הקובע כי כל תא בטבלה צריך להכיל פיסת נתונים בודדת אחת.
אלטרנטיבה עיצוב אחרת יכולה להיות פשוט להוסיף שיא השני של כרמן:
מורה_ID | מורהשם | כמובן |
---|---|---|
המורה | כרמן | ביולוגיה |
המורה | כרמן | מתמטיקה |
המורה | ורוניקה | מתמטיקה |
המורה | חורחה | אנגלית |
זה שומרת על 1NF אבל עדיין עיצוב מסד נתונים לקוי כי זה מציג יתירות יכול לנפח מסד נתונים גדול מאוד שלא לצורך. וחשוב יותר, הנתונים עלולים להיות בלתי עקביים. לדוגמה, מה אם השם של כרמן השתנה? מישהו שעובד עם הנתונים עשוי לעדכן את שמה ברשומה אחת ולא לעדכן אותו ברשומה השנייה. עיצוב זה מפר את טופס Normal Second (2NF), הדבק ב- 1NF וחייב להימנע גם מהיתירות הכפולות של מספר רשומות על-ידי הפרדת קבוצות נתונים למספר טבלאות ויצירת קשר ביניהן.
כיצד לעצב מסד נתונים עם אחד ליחסים רבים
כדי ליישם מערכת יחסים של אחד לרבים בטבלה מורים וקורסים, אנו לשבור את השולחנות לשניים ולקשר אותם באמצעות מפתח זר.
כאן הסרנו את העמודה 'קורס' בטבלת המורים:
מורה_ID | מורהשם |
---|---|
המורה | כרמן |
המורה | ורוניקה |
המורה | חורחה |
והנה טבלת הקורסים. שים לב שמפתח החוץ שלה, Teacher_ID, מקשר קורס למורה בטבלת המורים:
מזהה קורס | שם קורס | Teacher_ID |
---|---|---|
Course_001 | ביולוגיה | המורה |
הקורס | מתמטיקה | המורה |
הקורס | אנגלית | המורה |
פיתחנו מערכת יחסים בין המורים לבין טבלת הקורסים באמצעות מפתח זר.
זה אומר לנו כי הן ביולוגיה מתמטיקה נלמדים על ידי כרמן ו חורחה מלמד אנגלית.
אנו יכולים לראות כיצד עיצוב זה ימנע כל יתירות אפשרית, מאפשר למורים בודדים ללמד קורסים מרובים, ומיישם מערכת יחסים אחת לרבים.
מאגרי מידע יכולים גם ליישם מערכת יחסים של אחד על אחד ויחסים רבים-רבים.