العلاقات والقدرة الاستيعابية
العلاقات والقدرة الاستيعابية
لا تعيش الكيانات في عزلة. يحجز المريض مواعيد؛ وينتمي المنتج إلى فئة؛ ويلتحق الطالب بكثير من المقررات وكل مقرر فيه كثير من الطلاب. تسمى الخطوط التي تصل الكيانات في مخطط ERD علاقات، والأرقام أو الرموز التي تُعلّق عليها تسمى القدرة الاستيعابية (Cardinality).
تحديد القدرة الاستيعابية بشكل صحيح هو أحد أهم القرارات في نمذجة البيانات: فهو يحدد كيفية هيكلة الجداول، والمفاتيح الأجنبية المطلوبة، وما إذا كانت جداول وصل ضرورية، وفي نهاية المطاف مدى سلامة البيانات التي تستطيع قاعدة البيانات تطبيقها تلقائياً. يتناول هذا الدرس أنواع العلاقات الثلاثة ويُعلّمك قراءتها ورسمها باستخدام رمز قدم الغراب (Crow-Foot Notation) المعياري.
ما هي القدرة الاستيعابية؟
تصف القدرة الاستيعابية كم نسخةً من الكيان B يمكن أن ترتبط بنسخة واحدة من الكيان A، والعكس بالعكس. يجب دائماً ذكر قيمتين لكل طرف من خط العلاقة:
- الحد الأدنى للقدرة الاستيعابية — أقل عدد من النسخ التي يجب أن تشارك (0 = اختياري، 1 = إلزامي).
- الحد الأقصى للقدرة الاستيعابية — أكثر عدد من النسخ التي يمكن أن تشارك (1 = واحد، كثير = غير محدود).
في رمز قدم الغراب، تُشفَّر هاتان القيمتان كرموز تُرسم عند كل طرف من خط العلاقة:
- شريط عمودي (|) يعني "واحد بالضبط" — إلزامي.
- دائرة (○) تعني "صفر" — اختياري.
- قدم الغراب (تفرع) تعني "كثير" — واحد أو أكثر (أو صفر أو أكثر، مقترنةً بالدائرة).
المخطط الأول — دليل رمز قدم الغراب
قبل رسم أي ERD، استوعب هذه الرموز الستة. يُظهر المخطط أدناه كل التركيبات التي ستصادفها.
أنواع العلاقات الثلاثة
واحد إلى واحد (1:1)
في علاقة واحد إلى واحد، ترتبط نسخة واحدة من الكيان A بنسخة واحدة على الأكثر من الكيان B، والعكس صحيح. العلاقات 1:1 الحقيقية نادرة نسبياً في نماذج بيانات الأعمال — فهي في الغالب تشير إلى أنه كان من الممكن دمج الكيانين في جدول واحد، أو أن الفصل مقصود لأسباب تتعلق بالأمان أو الأداء أو النمطية.
مثال: في نظام مستشفى، لكل Patient سجل طبي واحد بالضبط MedicalRecord، وكل MedicalRecord ينتمي إلى Patient واحد بالضبط. انفصل الجدولان لأن الوصول إلى السجل الطبي يخضع لضوابط أمان أكثر صرامة من البيانات الديموغرافية الأساسية للمريض.
في رمز قدم الغراب، تُرسم العلاقة 1:1 بشريطين مزدوجين عند الطرفين: واحد واحد فقط على كل جانب. إذا كانت العلاقة اختيارية من جانب واحد (مثلاً، قد لا يكون للمريض سجل طبي بعد)، استبدل أحد زوجَي الشريطين بدائرة وشريط.
واحد إلى كثير (1:M)
علاقة واحد إلى كثير هي النوع الأكثر شيوعاً في قواعد البيانات العلائقية. ترتبط نسخة واحدة من الكيان A بـصفر أو واحد أو كثير من نسخ الكيان B، لكن كل نسخة من B ترتبط بنسخة واحدة بالضبط من A.
أمثلة:
- يضع
Customerواحد صفراً أو أكثر منOrders؛ كلOrderتنتمي إلىCustomerواحد بالضبط. - لدى
Doctorواحد مواعيد واحدة أو أكثرAppointments؛ كلAppointmentمخصصة لـDoctorواحد بالضبط. - تحتوي
Categoryواحدة على صفر أو أكثر منProducts؛ كلProductتنتمي إلىCategoryواحدة بالضبط.
تُنفَّذ في SQL بوضع مفتاح أجنبي (Foreign Key) في جدول "الكثير" يشير إلى المفتاح الأساسي لجدول "الواحد". يظهر رمز قدم الغراب عند طرف "الكثير"؛ ويظهر الشريط المزدوج (أو الدائرة-الشريط للاختياري) عند طرف "الواحد".
كثير إلى كثير (M:N)
في علاقة كثير إلى كثير، يمكن لنسخة واحدة من A أن ترتبط بنسخ كثيرة من B، ويمكن لنسخة واحدة من B أن ترتبط بنسخ كثيرة من A.
أمثلة:
- يلتحق
Studentواحد بكثير منCourses؛ وللـCourseالواحد كثير منStudents. - كتبَ
Authorواحد كثيراً منBooks؛ وللـBookالواحد كثير منAuthors. - يحتوي
Orderواحد على كثير منProducts؛ وللـProductالواحد مكان في كثير منOrders.
لا يمكن تطبيق علاقات M:N مباشرةً في قاعدة بيانات علائقية. فهي تتطلب جدول وصل (Junction Table) — يسمى أيضاً جدول جسر أو كيان ارتباطي — يحتفظ بمفاتيح أجنبية لكلا الجانبين ويحوّل العلاقة M:N إلى علاقتَي 1:M. يُتناول هذا بعمق في الدرس السادس.
grade وenrollment_date، فهذه الخصائص تنتمي إلى جدول الوصل — الذي يصبح بدوره كياناً مستقلاً بمسمى خاص.
المخطط الثاني — أنواع العلاقات الثلاثة (متجر إلكتروني)
يُظهر مخطط ERD التالي الأنواع الثلاثة لعلاقات في نموذج واحد لمتجر إلكتروني مبسّط. اقرأ كل خط علاقة باستخدام الدليل أعلاه.
قراءة المخطط
لنقرأ كل علاقة بلغة بسيطة لممارسة الرمز:
- Customer — CustomerProfile (1:1): لكل
CustomerواحدCustomerProfileبالضبط. وينتمي كلCustomerProfileإلىCustomerواحد بالضبط. لا يوجد اختياري في أي جانب — كلا الكيانين يجب أن يوجدا معاً. - Customer — Order (1:M): قد يضع
Customerواحد صفراً أو أكثر منOrders(كثير اختياري). يجب أن تنتمي كلOrderإلىCustomerواحد بالضبط (واحد إلزامي). يمكن أن يوجد حساب عميل قبل أي طلب، لذا طرف Order هو "صفر أو كثير" لا "واحد أو كثير". - Order — OrderItem — Product (M:N محلولة): يجب أن يحتوي
Orderواحد على واحد أو أكثر منOrderItems. كلOrderItemتشير إلىOrderواحد بالضبط. وبالمثل، قد يظهرProductواحد في واحد أو أكثر منOrderItems، وكلOrderItemتشير إلىProductواحد بالضبط. العلاقة M:N بين Order وProduct محلولة عبر جدول الوصلOrderItem، الذي يحمل أيضاً الخاصيةquantityالتي تنتمي بطبيعتها إلى الارتباط.
NOT NULL على المفتاح الأجنبي؛ أما الاختيارية فتسمح بـNULL. اسأل دائماً السؤالين: "هل يمكن أن يكون صفراً؟" و"هل يمكن أن يكون كثيراً؟"
المخطط الثالث — نظام مكتبة: اختبر قراءتك
إليك مخطط ERD ثانٍ لنظام إدارة مكتبة. ادرسه وحاول التعبير عن كل علاقة بلغة بسيطة قبل قراءة الوصف أدناه.
قراءة مخطط المكتبة:
- قد يمتلك
Memberواحد صفراً أو أكثر منLoans(عضو جديد لا إعارات له بعد). كلLoanتنتمي إلىMemberواحد بالضبط. - قد تظهر
BookCopyواحدة في صفر أو أكثر منLoansعلى مدى عمرها (نسخة لم تُعار قط لها صفر إعارات). كلLoanتغطيBookCopyواحدة بالضبط. - للـ
Bookالواحد نسخة مادية واحدة أو أكثر منBookCopies(يجب أن يكون للكتاب نسخة واحدة على الأقل ليكون موجوداً في النظام). كلBookCopyتنتمي إلىBookواحد بالضبط.
خلاصة
- تحدد القدرة الاستيعابية الحد الأدنى والأقصى لعدد نسخ الكيانات التي تشارك في علاقة ما.
- يُشفّر رمز قدم الغراب القدرة الاستيعابية بثلاثة رموز عند كل طرف خط: شريط مزدوج (واحد بالضبط)، دائرة (صفر / اختياري)، وتفرع قدم الغراب (كثير).
- أنواع العلاقات الثلاثة هي 1:1 (نادرة، غالباً لأسباب أمان أو أداء)، و1:M (الأكثر شيوعاً، تُنفَّذ بمفتاح أجنبي)، وM:N (تتطلب جدول وصل).
- اذكر دائماً كلاً من الحد الأدنى والأقصى للقدرة الاستيعابية — فالحد الأدنى يحدد ما إذا كان المفتاح الأجنبي قابلاً للإهمال وما إذا كانت العلاقة إلزامية.
- عندما تكون لعلاقة M:N خصائصها الخاصة (درجة، كمية، تاريخ التحاق)، يصبح جدول الوصل كياناً ارتباطياً مستقلاً بحق.