במאמר הקודם למדנו מהם קשרי גומלין. במאמר הזה נלמד על סוגי קשרי הגומלין השונים, וכיצד לקשור אותם באמצעות מפתחות.
ככלל, למסדי נתונים ישנם שלושה סוגים עיקריים של קשרים:
1. יחיד ליחיד – קשר מסוג זה משמעו ששדה אחד בטבלה אחת, קשור לשדה אחד בלבד בטבלה האחרת, ולהיפך.
דוגמה לקשר כזה היא טבלת נתונים שמפוצלת לשתי טבלאות שונות –
טבלת העובדים שמכילה את מספר העובד ואת המחלקה, וטבלת עובדים שמכילה את מספר העובד ואת השכר החודשי שלו.
קשר גומלין בין שתי הטבלאות הוא קשר של יחיד ליחיד,
מכיוון ששתיהן מכילות את אותה רשימת עובדים, וכל עובד מופיע בכל אחת מהן פעם אחת בלבד.
החלוקה לשתי טבלאות נעשה משיקולים שאינם קשורים למהות העבודה עם מסדי נתונים
ויכולים להיות לדוגמה שיקולי אבטחה (בעוד ששם המחלקה של העובד הוא נתון גלוי, נתוני השכר שלו הם נתונים חסויים, ואסור להם להישמר בטבלה הגלויה לעיני כל),
או שיקולי נוחות שימוש בטבלאות ענק בעלות שדות רבים.
דוגמה לקשר 'יחיד ליחיד':
2. יחיד לרבים – קשר מסוג זה מציין ששדה אחד בטבלה א' יכול להיות קשור לשדות רבים בטבלה ב',
אבל שדה אחד בטבלה ב' יכול להיות קשור לשדה אחד בלבד בטבלה א'.
למשל הקשר שבין טבלת העובדים שמכילה פרטים רלוונטיים על כל עובד, וכל עובד מופיע בה פעם אחת בלבד,
לבין טבלה שמתעדת את החופשות שהעובד יצא אליהן, ובה כל עובד יכול להופיע מספר רב של פעמים, בהתאם למספר החופשות שלקח.
למעשה, זהו הקשר הנפוץ ביותר.
הקשר שבין הטבלאות הוא קשר של יחיד לרבים, משום שעבור כל נתון של עובד בטבלת העובדים יכולות להיות רשומות רבות בטבלת החופשות
(הרי כל עובד יכול לצאת לחופשה מספר רב של פעמים), אבל עבור כל נתון של עובד בטבלת החופשות, יכולה להיות רק רשומה אחת קשורה בטבלת העובדים,
מכיוון שפרטיו של כל עובד מתועדים שם פעם אחת בלבד.
דוגמה לקשר 'יחיד לרבים':
הערה:
בדוגמה לעיל, מספרי העובד ממוינים לצורך הנוחות בלבד, כך שכל החופשות של אותו העובד יופיעו בסמיכות זו לזו.
במציאות, בדרך כלל החופשות יוזנו על פי תאריכי החופשה, ולא לפי מספר העובד.
הקשר הלוגי יודע לאתר את כל מספרי העובד בטבלת החופשות לפי מספר העובד בטבלת המחלקות, בין שהוזנו זה אחר זה, ובין שלא.
3. רבים לרבים – קשר שבו לכל רשומה בטבלה אחת יכולות להיות רשומות מתאימות רבות בטבלה השנייה,
ולהיפך – לכל רשומה בטבלה השנייה יכולות להיות רשומות מתאימות רבות בטבלה הראשונה.
דוגמה טובה לכך היא תלמידים וקורסים – כל תלמיד יכול ללמוד במספר רב של קורסים, ובכל קורס ישנו מספר רב של תלמידים.
קשר מסוג זה נוצר על ידי שני קשרי 'יחיד לרבים' באמצעות טבלה מקשרת.
דוגמה לקשר 'רבים לרבים':
הערה: סוגי הקשרים האפשריים במודל הנתונים הם קשר יחיד ליחיד וקשר יחיד לרבים.
מפתח ראשי (primary key)
מפתח ראשי הוא מזהה של רשומה. הוא מופיע פעם אחת בלבד בטבלה, וניתן לזהותה על פיו.
מפתחות ראשיים מקובלים הם תעודת זהות, מספר עובד, מספר רישוי, מק"ט וכד'.
המפתח הראשי בטבלת העובדים שלנו הוא מספר העובד, אולם מפתחות ראשיים יכולים להיות גם טקסטואליים, כמו בטבלת המחלקות,
שבה המפתח הראשי הוא שם המחלקה, שמופיע פעם אחת בלבד.
מפתח זר (foreign key)
מפתח זר הוא מפתח ראשי של טבלה אחת, שמופיע בטבלה אחרת.
בניגוד למפתח ראשי, שיכול להופיע פעם אחת בלבד בטבלה, מפתח זר יכול להופיע בטבלה יותר מאשר פעם אחת, ובמקרה שלנו – שדה המחלקה – שהוא המפתח הראשי בטבלת המחלקות, ולכן מופיע פעם אחת בלבד – מהווה מפתח זר בטבלת העובדים, ומופיע פעמים רבות.
האיור הבא יעזור לכם להבין:
בטבלת המחלקות מופיעה כל מחלקה פעם אחת בלבד, ולכן בטבלה הזו שדה המחלקה הוא מפתח ראשי:
ואילו בטבלת העובדים, מופיעות המחלקות פעמים רבות, ולכן שדה זה הוא מפתח זר:
אם כך, טבלת העובדים מכילה שני מפתחות – מפתח ראשי, שהוא מספר העובד, המופיע פעם אחת בלבד,
ומפתח זר שהוא שם המחלקה, שעשוי להופיע כמה פעמים בטבלה (אך רק פעם אחת בטבלת המחלקות).
יצירת קשרי הגומלין בין הטבלאות נעשית באמצעות המפתח המשותף, כאשר בטבלה אחת הוא המפתח הראשי, ובטבלה השנייה הוא המפתח הזר.