קשרי גומלין

‏ • 19 ביוני, 2004

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

סוגי קשרי הגומלין

הערה:
# – מפתח ראשי
IND – אינדקס ללא כפילויות

קיימים שלושה סוגי קשרי גומלין:

קשר יחיד לרבים

לכל רשומה בצד היחיד ייתכנו מס' רשומות תואמות בצד הרבים.
לדוגמא: מרפאה- מטופלים וביקוריהם. טבלת מטופלים בה כל מטופל מופיע פעם אחת וטבלת הביקורים בה המטופל יכול להופיע כמה פעמים שיתחשק לו (מקווה שלא יתחשק לו :).
במקרה זה אם מסיבה כל-שהיא המטופל משנה את ת.ז הזהות שלא (אם זה אפשרי בכלל 🙂 אז כל השדות הנמצאות בטבלת הביקורים בעמודת ת.ז אשר מתאימות לאותו שדה ישנו גם את ת.ז (בתנאי שהגדרנו את "cascade update related fields").
כמו כן אם הגדרנו את "cascade delete related record" ומחקנו בטבלת המטופלים את רשומה מסוימת אז כל הרשומות בטבלת הביקורים שנמצאו מתאימות גם ימחקו.
אבל אם נשנה/נמחק שדה/רשומה (בהתאמה) בטבלת הרבים לא יתבצע שום שינוי בטבלת היחיד.


קשר יחיד ליחיד

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



קשר רבים לרבים

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

וכך זה יראה בבסיס הנתונים: לחץ לתמונה מוגדלת

יצירת קשרי הגומלין

באקסס בתפריט כלים נבחר ב-קשרי גומלין (tools'relationShips)
לאחר מכן תופיע לנו תיבה מסוימת שיהיו בה את הטבלאות והשאילתות שברצוננו לקבוע ביניהן קשרי גומלין. נבחר רק בטבלאות שברצוננו לקבוע ביניהן קשרי גומלין ונלחץ "הוסף" (ADD). לאחר מכן נגרור את שדה מטבלה אחת על שדה שברצוננו לעשות עם טבלתו קשר גומלין ותיפתח לנו תיבה בה יופיעו השדות שברצוננו לקשר (ואת טבלאותיהן) ושלוש תיבות סימון ("אכוף את שלמות הקשרים","עדכן שדות מקושרים","מחק רשומות מקושרות"- יוסבר בהמשך).

שמירה על שלמות הנתונים

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


אכוף שלמות קשרים

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

"you cannot add or change record because a related record is required in table 'TableName'"


עדכן שדות מקושרים

אם סימנו בעת יצירת קשרי הגומלין את "cascade update related fields" אז בעת עדכון של השדה המקושר בטבלת היחיד (הסבר בהמשך) אז השדה המקושר בטבלת הרבים/יחיד גם יעודכן.

מחק רשומות מקושרות

אם סימנו בעת יצירת קשרי הגומלין את "cascade delete related record" אז בעת מחיקת רשומה בטבלת היחיד כל הרשומות התואמות בטבלת הרבים/יחיד המקושרת אל טבלת היחיד ימחקו

לחץ כאן להורדת קובץ ה-MDB

בהצלחה!

תגיות: , , , , ,

ניר טייב

בונה אתרים ומתכנת בשפות:HTML, CSS, JavaScript, PHP 5, JSP&Servlets ורובי.

תגובות בפייסבוק