العلاقات المتعددة
Many-to-Many
مفهوم
~19 دقيقة
العلاقات المتعددة — Many-to-Many
بعض العلاقات ليست واحداً إلى كثير فقط. الدرس قد يملك عدة وسوم، والوسم قد يظهر في عدة دروس. هنا نحتاج جدولاً وسيطاً مثل lesson_tags يحتوي lesson_id وtag_id. هذا الجدول يمثل العلاقة نفسها.
لا تضع قائمة وسوم كنص مفصول بفواصل داخل جدول الدروس إذا كنت تحتاج البحث والربط والتقارير. الجدول الوسيط يجعل البيانات قابلة للاستعلام.
مثال عملي
query.sql
Output:
الاستعلام يمر عبر الجدول الوسيط للوصول إلى الطرفين.
لماذا المفتاح المركب والقيود؟
الجدول الوسيط بلا قيود هو أنتي-باترن شائع. إليك ما يحمينا:
NOT NULL: يمنع صفوفاً “يتيمة” بلا درس أو بلا وسم — الصف الوسيط بلا طرفين لا معنى له.PRIMARY KEY (lesson_id, tag_id): يفرض التفرد — لا يمكن ربط نفس الدرس بنفس الوسم مرتين. كذلك يُنشئ فهرساً تلقائياً يُسرّعJOIN ... ON lesson_id = ?.ON DELETE CASCADE: عند حذف درس أو وسم، تُحذف صفوف العلاقة تلقائياً؛ لا بيانات معلقة.
الاسم مهم
سمّ الجدول الوسيط باسم يوضح العلاقة. lesson_tags أفضل من map1 أو links.
تحدي — Challenge
اربط lesson_tags مع tags واختر name