סוגי קשרים בין טבלאות ב-SQL

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

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

תוכן עניינים

קשר יחיד ליחיד (One-to-One)

קשר יחיד ליחיד הוא הקשר הנדיר ביותר במסדי נתונים. במבנה זה, לכל רשומה בטבלה אחת יש בדיוק רשומה אחת מקושרת בטבלה אחרת. לדוגמה, נניח שיש לנו טבלה של Customers וטבלה של Addresses – אם כל לקוח יכול להיות מקושר לכתובת אחת בלבד, ואותה כתובת לא יכולה להיות בשימוש על ידי לקוח אחר, זהו קשר יחיד ליחיד.

מתי משתמשים בקשר כזה?

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

יישום ב-SQL

בדרך כלל, קשר יחיד ליחיד ייושם באמצעות מפתח ראשי (Primary Key) על עמודת המפתח בטבלה אחת, ומפתח חוץ (Foreign Key) שמצביע על עמודה ייחודית בטבלה השנייה.

				
					<xmp>CREATE TABLE Customers (
    customer_id INT PRIMARY KEY,
    customer_name VARCHAR(100)
);

CREATE TABLE Addresses (
    address_id INT PRIMARY KEY,
    customer_id INT UNIQUE,
    address VARCHAR(255),
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);</xmp>
				
			

קשר יחיד לרבים (One-to-Many)

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

מתי משתמשים בקשר כזה?

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

יישום ב-SQL

בקשר כזה, יש להגדיר מפתח ראשי בטבלה הראשית (למשל, טבלת Managers), ומפתח חוץ בטבלה התלויה (למשל, טבלת Employees) שמצביע על המפתח הראשי.

				
					<xmp>CREATE TABLE Managers (
    manager_id INT PRIMARY KEY,
    manager_name VARCHAR(100)
);

CREATE TABLE Employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(100),
    manager_id INT,
    FOREIGN KEY (manager_id) REFERENCES Managers(manager_id)
);</xmp>
				
			

קשר רבים לרבים (Many-to-Many)

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

מתי משתמשים בקשר כזה?

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

יישום ב-SQL

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

				
					<xmp>CREATE TABLE Students (
    student_id INT PRIMARY KEY,
    student_name VARCHAR(100)
);

CREATE TABLE Courses (
    course_id INT PRIMARY KEY,
    course_name VARCHAR(100)
);

CREATE TABLE Students_Courses (
    student_id INT,
    course_id INT,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES Students(student_id),
    FOREIGN KEY (course_id) REFERENCES Courses(course_id)
);
</xmp>
				
			

לסיכום

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

  • One-to-One: כאשר לכל רשומה יש רק קשר אחד עם רשומה אחרת ואין צורך בקשרים נוספים.
  • One-to-Many: כאשר ישנו מבנה היררכי בו ישות אחת יכולה להיות מקושרת לכמה ישויות אחרות.
  • Many-to-Many: כאשר יש שני צדדים המקושרים זה לזה במספר אפשרויות הדדיות.

קשרים בין טבלאות הם חלק מרכזי בעיצוב מסד נתונים יעיל ואיכותי. ההבנה של סוגי הקשרים השונים והבחירה הנכונה בהם הם הבסיס לבניית מסדי נתונים שמייצגים את המציאות בצורה מדויקת, ומבטיחים שלמות נתונים.
המדריך למפתח ה-BI
מהבנה בסיסית של בינה עסקית ועד לבניית ETL, מידול נתונים, שימוש בכלים שונים ועוד.
בואו לבקר במאגר המידע המקיף ביותר בעברית על עולם פיתוח ה-BI!​

דברו איתנו