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

תוכן עניינים:

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

קשר של אחד לרבים במסד נתונים מתרחש כאשר לכל רשומה בטבלה A עשויות להיות רשומות מקושרות רבות בטבלה B, אך לכל רשומה בטבלה B עשויה להיות רק רשומה אחת מתאימה בטבלה A.

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

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

Image
Image

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

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

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

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

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

דבקות בעיצוב הטופס הרגיל הראשון

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

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

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

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

מוּמלָץ: