Skip to main content

מהו קשר מסד נתונים?

הצגת נתונים ממסד נתונים באמצעות קשרי גומלין | Relationship (יוני 2026)

הצגת נתונים ממסד נתונים באמצעות קשרי גומלין | Relationship (יוני 2026)
Anonim

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

איך מפתח זר פועל כדי ליצור מערכת יחסים

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

מפתח זר הוא מפתח מועמד אחר (לא המפתח הראשי) המשמש לקישור רשומה לנתונים בטבלה אחרת.

לדוגמה, שקול את שני הטבלאות המזהות איזה מורה מלמד באיזה קורס.

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

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

ניתן לראות שהמפתח הזר בקורסים תואם למפתח הראשי במורים:

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

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

סוגי מערכות יחסים

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

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

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

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

שקול עסק עם מסד נתונים שיש לו לקוחות טבלאות הזמנות.

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

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

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

מה הם יחסי מסד נתונים חשוב?

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

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

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

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

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

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

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

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