أنواع العلاقات ورموزها
واحد لواحد، وواحد لمتعدد، ومتعدد لمتعدد، وكيف نرسمها. ⏱ نحو 25 دقيقة.
- تحدد تعددية العلاقة بسؤالين من الاتجاهين.
- تميّز علاقات 1:1 و
1:NوM:Nوطريقة تنفيذ كل منها. - تقرأ رموز قدم الغراب الأربعة وتفرّق بين الإلزامي والاختياري.
- تحوّل علاقة
M:Nإلى جدول وسيط.
١التعددية: كم نسخة ترتبط بكم؟
بعد أن نحدد العلاقة (الطالب ينتمي إلى قسم)، نسأل سؤالين، من كل اتجاه سؤال:
- الطالب الواحد، كم قسمًا ينتمي إليه؟ ← واحد.
- القسم الواحد، كم طالبًا ينتمي إليه؟ ← كثير.
الجوابان معًا يعطيان تعددية العلاقة Cardinality: هنا «واحد لمتعدد». والعلاقات ثلاثة أنواع:
| النوع | الرمز | مثال | كيف تُنفَّذ؟ |
|---|---|---|---|
| واحد لواحد | 1:1 | المواطن وجواز سفره | مفتاح أجنبي فريد UNIQUE في أحد الجدولين، أو دمجهما. |
| واحد لمتعدد | 1:N | القسم وطلابه، العميل وطلباته | مفتاح أجنبي في جدول «المتعدد». |
| متعدد لمتعدد | M:N | الطلاب والمقررات | جدول وسيط فيه مفتاحان أجنبيان. |
٢رموز قدم الغراب
كل طرف من الخط يحمل رمزين: الأقرب إلى الكيان يقول الحد الأعلى (واحد أو كثير)، والأبعد يقول الحد الأدنى (صفر = اختياري، أو واحد = إلزامي):
اقرأ الرمز عند الطرف البعيد عنك: من القسم نحو الطلاب نجد «صفر أو أكثر»، أي: القسم فيه صفر أو أكثر من الطلاب (قسم الأمن السيبراني الجديد ليس فيه طلاب بعد). ومن الطالب نحو القسم نجد «صفر أو واحد»، أي: الطالب في قسم واحد على الأكثر، وقد لا يُحدَّد قسمه بعد. وهذا ما في البيانات فعلًا:
students · 3 صفوف| id | name | dept_id |
|---|---|---|
| 1001 | أحمد السلمي | 1 |
| 1003 | عمر الحربي | 2 |
| 1011 | زياد القرشي | NULL |
٣الإلزامي والاختياري
الحد الأدنى يسمى المشاركة Participation، وله أثر مباشر في الجدول:
| في المخطط | المعنى | في الجدول |
|---|---|---|
| الطلب ← واحد فقط من العملاء | لا طلب بلا عميل | customer_id INTEGER NOT NULL |
| الطالب ← صفر أو واحد من الأقسام | قد لا يُحدَّد القسم | dept_id INTEGER (يقبل NULL) |
SELECT name FROM students WHERE dept_id IS NULL;| name |
|---|
| زياد القرشي |
زياد بلا قسم، والقاعدة تقبل ذلك لأن العلاقة اختيارية من جهة الطالب.
٤علاقة متعدد لمتعدد والجدول الوسيط
الطالب يسجّل في مقررات كثيرة، والمقرر فيه طلاب كثيرون. لا يمكن وضع رقم المقرر في جدول الطلاب (أي مقرر من الثلاثة؟)، ولا العكس. الحل: جدول وسيط كل صف فيه تسجيل واحد: طالب + مقرر، ومعه خصائص العلاقة نفسها مثل الدرجة:
-- تسجيلات الطالب أحمد (1001): ثلاثة مقرراتSELECT student_id, course_id, gradeFROM enrollmentsWHERE student_id = 1001;
| student_id | course_id | grade |
|---|---|---|
| 1001 | 1 | 95 |
| 1001 | 2 | 92 |
| 1001 | 3 | 88 |
-- وطلاب المقرر 2 (مبادئ قواعد البيانات)SELECT student_id, gradeFROM enrollmentsWHERE course_id = 2;
| student_id | grade |
|---|---|
| 1001 | 92 |
| 1002 | 85 |
| 1004 | 97 |
| 1007 | 60 |
| 1010 | 76 |
٥المخطط الكامل لمتجر الواحة
| العلاقة | التعددية | نقرؤها |
|---|---|---|
| العملاء ← الطلبات | 1:N | العميل له صفر أو أكثر من الطلبات، والطلب لعميل واحد فقط. |
| الطلبات ← الأصناف | 1:N | الطلب فيه صنف واحد أو أكثر، والصنف يتبع طلبًا واحدًا. |
| المنتجات ← الأصناف | 1:N | المنتج قد يظهر في أصناف كثيرة، أو لا يُطلب أبدًا. |
| الطلبات ↔ المنتجات | M:N | عبر الجدول الوسيط order_items، وفيه الكمية والسعر وقت البيع. |
توقّع وتحقّق
العلاقة بين العميل وطلباته:
العلاقة بين الطلاب والمقررات:
الدائرة في طرف الخط تعني:
في علاقة 1:N يوضع المفتاح الأجنبي في جدول:
الخلاصة
- التعددية: كم نسخة ترتبط بكم، من الاتجاهين.
1:N: المفتاح الأجنبي في جهة المتعدد.M:N: جدول وسيط بمفتاحين أجنبيين.- رمز قدم الغراب: الأقرب للكيان الحد الأعلى، والأبعد الحد الأدنى.
- الإلزامي يصير
NOT NULL، والاختياري يقبلNULL.
تحدٍّ تصميمي: مخطط مكتبة الكلية
متوسطارسم مخطط ERD كاملًا بترميز قدم الغراب لمكتبة: «للكتاب ISBN وعنوان وسنة نشر. للكتاب مؤلف أو أكثر، والمؤلف قد يكتب كتبًا كثيرة. العضو يستعير كتبًا كثيرة عبر الزمن، ونسجل تاريخ الإعارة وتاريخ الإرجاع.»
- حدد الكيانات: الكتب والمؤلفون والأعضاء.
- حدد تعددية كل علاقة، وارسم رموز الطرفين.
- حوّل كل علاقة
M:Nإلى جدول وسيط بمفتاحين أجنبيين.
💡 تلميح 1
💡 تلميح 2
M:N.