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

יחסי מסד נתונים הם עמוד השדרה של כל מסדי נתונים יחסיים

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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