الدرس 4: MCD - الجزء الثاني: العلاقات والأدوار (Cardinalités)

في الدرس السابق، تعلمنا كيف نحدد الكيانات (مثل طالب، كتاب) والخصائص التي تصفها. لكن الكيانات نادراً ما تكون معزولة. "الطالب" يقوم بـ"استعارة" "كتاب"، و"الأستاذ" "يُدرس" "مادة". هذه الروابط هي ما نسميها العلاقات.
1. تعريف العلاقة (Relationship)
تخيل أن الكيانات هي أفراد في مجتمع. العلاقة هي "العمل" أو "التفاعل" الذي يحدث بين هؤلاء الأفراد.
التعريف: الـ علاقة (Relationship) هي رابط منطقي ذو معنى يربط بين كيانين أو أكثر. تصف كيف تتفاعل الكيانات مع بعضها البعض.
أمثلة:
- طالب يستعير كتاب. (العلاقة: يستعير)
- أستاذ يدرّس مادة. (العلاقة: يدرّس)
- زبون يضع طلب. (العلاقة: يضع)
خصائص العلاقة (اختياري): في بعض الأحيان، العلاقة نفسها قد تكون لها خصائص. مثلاً، في علاقة "يستعير" بين "طالب" و"كتاب"، قد تكون هناك خاصية "تاريخ_الاستعارة". هذه الخاصية تصف العلاقة نفسها، وليس الكيانين.
كيف نمثلها في MCD؟
تُمثل العلاقة بـ شكل بيضاوي أو معين، والخطوط تربطها بالكيانات المشاركة.
| طالب |------------------(يستعير)----------------| كتاب |
+---------+ +----------+
2. الأدوار (Cardinalités) بالتفصيل
هنا يأتي الجزء الممتع والحاسم! الأدوار (Cardinalités) هي الأرقام التي نضعها على أطراف العلاقة، وتصف عدد المرات التي يمكن أن يشارك فيها مثيل (instance) من كيان معين في العلاقة. تخيلها كـ "قواعد اللعبة" لكل كيان.
كل دور يتكون من رقمين (X, Y)
، حيث:
X
(الحد الأدنى - Minimum): يمثل الحد الأدنى لعدد المرات التي يجب أن يشارك فيها مثيل واحد من الكيان في العلاقة. (قيمته تكون 0 أو 1)Y
(الحد الأقصى - Maximum): يمثل الحد الأقصى لعدد المرات التي يمكن أن يشارك فيها مثيل واحد من الكيان في العلاقة. (قيمته تكون 1 أو n)
الشكل العام لنموذج MCD يوضح مكونات العلاقة والأدوار التي تحدد قواعد المشاركة.
لدينا أربع حالات رئيسية للأدوار:
أ. الدور (1,1)
- واحد وواحد فقط (Exactly One)
المعنى: كل مثيل من الكيان يجب أن يشارك مرة واحدة فقط. المشاركة إلزامية وفريدة.
مثال: "كل موظف يعمل في قسم واحد فقط." (من جهة الموظف، الدور هو (1,1)
لأنه يجب أن ينتمي لقسم واحد بالضبط).
ب. الدور (0,1)
- صفر أو واحد (Zero or One)
المعنى: كل مثيل من الكيان يمكن أن يشارك مرة واحدة على الأكثر (أو لا يشارك). المشاركة اختيارية وفريدة.
مثال: "الموظف قد يكون لديه سيارة خدمة واحدة على الأكثر." (من جهة الموظف، الدور هو (0,1)
لأنه قد لا تُخصص له سيارة).
ج. الدور (1,n)
- واحد أو أكثر (One or More)
المعنى: كل مثيل من الكيان يجب أن يشارك مرة واحدة على الأقل، ويمكن أن يشارك عدة مرات.
مثال: "القسم يضم موظفاً واحداً أو أكثر." (من جهة القسم، الدور هو (1,n)
لأنه لا يمكن أن يوجد قسم فارغ).
د. الدور (0,n)
- صفر أو أكثر (Zero or More)
المعنى: كل مثيل من الكيان يمكن ألا يشارك، أو يشارك عدة مرات. المشاركة اختيارية ومتعددة.
مثال: "الزبون يمكن أن يقوم بـ صفر أو أكثر من الطلبيات." (يمكن تسجيل معلومات الزبون قبل أن يقوم بأي طلبية).
ملاحظة هامة جداً: عندما نقوم بتحديد الأدوار، فإننا نفعل ذلك لكل كيان على حدة بالنسبة للعلاقة. أي، نسأل:
- "كم مرة يمكن/يجب لمثال واحد من الكيان (أ) أن يشارك في العلاقة (س)؟" --> هذا يحدد الدور بجانب الكيان (أ).
- "كم مرة يمكن/يجب لمثال واحد من الكيان (ب) أن يشارك في العلاقة (س)؟" --> هذا يحدد الدور بجانب الكيان (ب).
💡 حقيقة ممتعة: الأدوار هي قواعد عمل شركتك!
هل تعلم أن تحديد الأدوار بشكل صحيح يشبه كتابة قواعد عمل الشركة؟ إذا أخطأت فيها، قد تسمح لنظامك بتسجيل معلومات غير منطقية.
تخيل أنك وضعت الدور (0,n)
بين "الطالب" و "استعارة"، وبين "الكتاب" و "استعارة"، فهذا يعني أن:
- الطالب يمكن أن يستعير صفر أو أكثر من الكتب (هذا منطقي ✅).
- الكتاب يمكن أن يُستعار من قبل صفر أو أكثر من الطلاب (وهنا المشكلة! ❌).
هذه القاعدة تسمح باستعارة نفس نسخة الكتاب من قبل عدة طلاب في نفس الوقت!
الحل الصحيح: تحديد الدور (0,1)
للكتاب في علاقة "استعارة" سيُصلح هذه القاعدة ويمنع استعارة الكتاب الواحد لأكثر من طالب في نفس الوقت.
دقة الأدوار تضمن منطقية البيانات وصحة العمليات.