الدرس 8: تحويل علاقات (n,n) من MCD إلى MLD (الجزء 2) | تحليل ملف التصميم

admin
الصفحة الرئيسية
الدرس 8: تحويل علاقات (n,n) من MCD إلى MLD (الجزء 2)
وصف الصورة

وصف الصورة

الدرس 8: قواعد الانتقال من MCD إلى MLD (الجزء الثاني)

التعامل مع علاقات (n,n) - متعدد إلى متعدد

في الدروس السابقة، تعلمنا كيفية التعامل مع علاقات "الأب-الابن". لكن ماذا لو كانت العلاقة متساوية من الطرفين، حيث يمكن لكل طرف أن يرتبط بالعديد من الطرف الآخر؟ هذه هي علاقة (n,n)، وهي تتطلب قاعدة خاصة للتحويل.

أمثلة: الطالب يسجل في عدة مواد، والمادة يسجل فيها عدة طلاب. المنتج يوجد في عدة طلبات، والطلب يحتوي على عدة منتجات.

المشكلة هي أننا لا نستطيع تطبيق قاعدة "هجرة المفتاح" هنا، لأننا سنحتاج لتخزين عدة قيم في حقل واحد، وهذا ممنوع في قواعد البيانات العلائقية.

القاعدة الذهبية لتحويل علاقات (n,n)

القاعدة: كل علاقة (n,n) في الـ MCD تتحول إلى جدول مستقل جديد في الـ MLD. يُعرف هذا بـ جدول الربط (Junction Table).

مكونات جدول الربط:

  1. المفاتيح الأجنبية (FKs): يستقبل المفاتيح الأساسية (PKs) من كلا الجدولين الأصليين.
  2. المفتاح الأساسي المركب (Composite PK): المفاتيح الأجنبية التي استقبلها تُشكل معاً المفتاح الأساسي للجدول الجديد. هذا يضمن أن كل علاقة فريدة (مثل تسجيل طالب معين في مادة معينة) تحدث مرة واحدة فقط.
  3. خصائص العلاقة: إذا كانت العلاقة الأصلية في MCD تمتلك خصائص (مثل "الدرجة" في علاقة التسجيل)، فإن هذه الخصائص تصبح أعمدة عادية في جدول الربط.

أمثلة تطبيقية

مثال 1: الطلاب والدورات التدريبية (مع خاصية على العلاقة)

MCD: طالب (0,n) --- (يسجل_في | تاريخ_التسجيل) --- (0,n) دورة_تدريبية.

التحويل: تتحول علاقة "يسجل_في" إلى جدول جديد "التسجيلات_الدراسية".

الطلاب
  • PK رقم_الطالب
  • اسم_الطالب
التسجيلات_الدراسية
  • PKFK رقم_الطالب
  • PKFK رمز_الدورة
  • تاريخ_التسجيل
الدورات_التدريبية
  • PK رمز_الدورة
  • عنوان_الدورة
  • عدد_الساعات

مثال 2: الأفلام والممثلون (بدون خاصية على العلاقة)

MCD: فيلم (0,n) --- (يمثل_في) --- (0,n) ممثل.

التحويل: تتحول علاقة "يمثل_في" إلى جدول "المشاركات_التمثيلية".

الأفلام
  • PK معرف_الفيلم
  • عنوان_الفيلم
المشاركات_التمثيلية
  • PKFK معرف_الفيلم
  • PKFK معرف_الممثل
الممثلون
  • PK معرف_الممثل
  • اسم_الممثل

مثال 3: الأطباء والمرضى (عبر كيان وسيط)

أحياناً، تكون العلاقة (n,n) الضمنية بين كيانين (طبيب ومريض) أكثر تعقيداً من مجرد رابط. قد تحتوي على خصائص مهمة جداً (تاريخ، ساعة، ملاحظات) تجعلها كياناً بحد ذاتها (موعد).

MCD: طبيب (0,n) -- (1,1) موعد (1,1) -- (0,n) مريض.

التحويل: هنا لا ننشئ جدول ربط، بل نعامل "الموعد" كجدول عادي يستقبل المفاتيح الأجنبية من جدول "الأطباء" وجدول "المرضى" بناءً على قواعد علاقات (1-n) التي تعلمناها سابقاً.

الأطباء
  • PK رقم_الطبيب
  • اسم_الطبيب
المواعيد
  • PK رقم_الموعد
  • تاريخ_الموعد
  • FK رقم_الطبيب
  • FK رقم_المريض
المرضى
  • PK رقم_المريض
  • اسم_المريض

خلاصة قواعد الانتقال (الكاملة)

  1. الكيانات: كل كيان يصبح جدولاً.
  2. علاقات (1-n): المفتاح الأساسي من جهة "1" يهاجر كـ FK إلى جهة "n".
  3. علاقات (n-n): تتحول العلاقة إلى جدول ربط جديد، يأخذ المفاتيح الأساسية من الجدولين الأصليين كـ FKs، ويستخدمهما معاً كمفتاح أساسي مركب.

إتقان هذه القواعد الثلاث هو المفتاح لتصميم أي قاعدة بيانات علائقية بشكل صحيح ومنطقي.

google-playkhamsatmostaqltradent