شرح صفوف ومحتوى الفقرة
في علاقة متعدد لمتعدد (M:N)، يرتبط السجل الواحد في الجدول الأول بعدة سجلات في الجدول الثاني، والعكس صحيح أيضاً (مثل: الطلاب والدورات التدريبية، أو الطلبات والمنتجات):
- استحالة الربط المباشر بين الجدولين: لا يمكن تخزين قائمة أرقام دورات داخل خلية واحدة في جدول الطلاب.
- الحل الهندسي عبر جدول الربط الوسيط (Junction / Pivot Table): ننشئ جدولاً ثالثاً وسيطاً (مثل
enrollments) يحتوي على مفتاحين أجنبيين؛ فيفكك علاقةM:Nالمعقدة إلى علاقتي1:Nقياسيتين.
SQL
CREATE TABLE enrollments (
student_id INT UNSIGNED NOT NULL,
course_id INT UNSIGNED NOT NULL,
enrolled_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES customers(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;