יחיד ליחסים רבים במסד נתונים

קשר אחד לרבים במסד נתונים מתרחש כאשר לכל רשומה בטבלה A יש רשומות מקושרות רבות בטבלה ב ', אך לכל רשומה בטבלה ב' יש רק רישום מקביל אחד בטבלה א '. יחס אחד לרבים ב- מסד נתונים הוא העיצוב הנפוץ ביותר למסדי נתונים יחסיים והוא בלב של עיצוב טוב.

חשוב על היחסים בין מורה לבין הקורסים שהם מלמדים. מורה יכול ללמד קורסים מרובים, אבל כמובן לא היה את אותה מערכת יחסים עם המורה.

לכן, עבור כל רשומה בטבלה מורים, יכול להיות שיש רשומות רבות בטבלה קורסים. זהו יחס של אחד לרבים: מורה אחד למספר קורסים.

מדוע הקמת מערכת יחסים אחת לרבים חשובה

כדי לייצג יחסים של אחד לרבים, אתה צריך לפחות שתי טבלאות. בואו נראה למה.

אולי יצרנו שולחן מורים שבו רצינו להקליט את השם ואת הקורסים לימד. אנו עשויים לעצב את זה כך:

מורים וקורסים
Teacher_ID שם המורה קוּרס
המורה כרמן ביולוגיה
המורה ורוניקה מתמטיקה
המורה חורחה אנגלית

מה אם כרמן מלמדת שני קורסים או יותר? יש לנו שתי אפשרויות עם עיצוב זה. אנחנו יכולים פשוט להוסיף אותו לרשומה הקיימת של כרמן, כך:

מורים וקורסים
Teacher_ID מורה _ שם קוּרס
המורה כרמן ביולוגיה, מתמטיקה
המורה ורוניקה מתמטיקה
המורה חורחה אנגלית

העיצוב לעיל, לעומת זאת, הוא גמיש ויכול לגרום לבעיות מאוחר יותר כאשר מנסים להוסיף, לערוך או למחוק נתונים.

זה מקשה על חיפוש נתונים. עיצוב זה מפר את העקרון הראשון של נורמליזציה של מסד הנתונים, טופס ראשון רגיל (1NF) , הקובע כי כל תא בטבלה צריך להכיל פיסת נתונים בודדת אחת.

אלטרנטיבה עיצוב אחרת יכולה להיות פשוט להוסיף שיא השני של כרמן:

מורים וקורסים
מורה _ID מורה _ שם קוּרס
המורה כרמן ביולוגיה
המורה כרמן מתמטיקה
המורה ורוניקה מתמטיקה
המורה חורחה אנגלית

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

כיצד לעצב מסד נתונים עם אחד ליחסים רבים

כדי ליישם מערכת יחסים של אחד לרבים בטבלה מורים וקורסים, אנו לשבור את השולחנות לשניים ולקשר אותם באמצעות מפתח זר .

כאן הסרנו את העמודה 'קורס' בטבלת המורים:

מורים
מורה _ID מורה _ שם
המורה כרמן
המורה ורוניקה
המורה חורחה

והנה טבלת הקורסים. שים לב שמפתח החוץ שלה, Teacher_ID, מקשר קורס למורה בטבלת המורים:

קורסים
מזהה קורס שם קורס Teacher_ID
Course_001 ביולוגיה המורה
הקורס מתמטיקה המורה
הקורס אנגלית המורה

פיתחנו מערכת יחסים בין המורים לבין טבלת הקורסים באמצעות מפתח זר.

זה אומר לנו כי הן ביולוגיה מתמטיקה נלמדים על ידי כרמן ו חורחה מלמד אנגלית.

אנו יכולים לראות כיצד עיצוב זה ימנע כל יתירות אפשרית, מאפשר למורים בודדים ללמד קורסים מרובים, ומיישם מערכת יחסים אחת לרבים.

מאגרי מידע יכולים גם ליישם מערכת יחסים של אחד על אחד ויחסים רבים-רבים.