نمذجة البيانات ومخططات الكيانات والعلاقات

العلاقات والقدرة الاستيعابية

18 دقيقة الدرس 3 من 10

العلاقات والقدرة الاستيعابية

لا تعيش الكيانات في عزلة. يحجز المريض مواعيد؛ وينتمي المنتج إلى فئة؛ ويلتحق الطالب بكثير من المقررات وكل مقرر فيه كثير من الطلاب. تسمى الخطوط التي تصل الكيانات في مخطط ERD علاقات، والأرقام أو الرموز التي تُعلّق عليها تسمى القدرة الاستيعابية (Cardinality).

تحديد القدرة الاستيعابية بشكل صحيح هو أحد أهم القرارات في نمذجة البيانات: فهو يحدد كيفية هيكلة الجداول، والمفاتيح الأجنبية المطلوبة، وما إذا كانت جداول وصل ضرورية، وفي نهاية المطاف مدى سلامة البيانات التي تستطيع قاعدة البيانات تطبيقها تلقائياً. يتناول هذا الدرس أنواع العلاقات الثلاثة ويُعلّمك قراءتها ورسمها باستخدام رمز قدم الغراب (Crow-Foot Notation) المعياري.

ما هي القدرة الاستيعابية؟

تصف القدرة الاستيعابية كم نسخةً من الكيان B يمكن أن ترتبط بنسخة واحدة من الكيان A، والعكس بالعكس. يجب دائماً ذكر قيمتين لكل طرف من خط العلاقة:

  • الحد الأدنى للقدرة الاستيعابية — أقل عدد من النسخ التي يجب أن تشارك (0 = اختياري، 1 = إلزامي).
  • الحد الأقصى للقدرة الاستيعابية — أكثر عدد من النسخ التي يمكن أن تشارك (1 = واحد، كثير = غير محدود).

في رمز قدم الغراب، تُشفَّر هاتان القيمتان كرموز تُرسم عند كل طرف من خط العلاقة:

  • شريط عمودي (|) يعني "واحد بالضبط" — إلزامي.
  • دائرة (○) تعني "صفر" — اختياري.
  • قدم الغراب (تفرع) تعني "كثير" — واحد أو أكثر (أو صفر أو أكثر، مقترنةً بالدائرة).
نصيحة للقراءة: اقرأ دائماً خط العلاقة من منظور كيان واحد باتجاه الآخر. "يضع عميل واحد صفراً أو أكثر من الطلبات" — اقرأ الرموز عند الطرف Order. ثم انعكس: "تنتمي طلبية واحدة إلى عميل واحد بالضبط" — اقرأ الرموز عند الطرف Customer.

المخطط الأول — دليل رمز قدم الغراب

قبل رسم أي ERD، استوعب هذه الرموز الستة. يُظهر المخطط أدناه كل التركيبات التي ستصادفها.

Crow-Foot Notation Legend Symbol Meaning Example phrase Exactly one (mandatory) "must have exactly one" Zero or one (optional) "may have at most one" One or many (mandatory many) "must have at least one" Zero or many (optional many) "may have none or many" How to read: symbols are always drawn at the END of the line closest to the entity they describe. The symbol nearest entity B tells you how many B instances relate to ONE instance of entity A.
دليل رمز قدم الغراب: الرموز الأربعة لأطراف الخط ومعانيها. يحمل كل خط علاقة رموزاً عند طرفيه.

أنواع العلاقات الثلاثة

واحد إلى واحد (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. يُتناول هذا بعمق في الدرس السادس.

عادة المحلل: عندما تحدد علاقة M:N، اسأل فوراً: "هل للعلاقة نفسها خصائص؟" إذا كان التحاق طالب بمقرر يتضمن grade وenrollment_date، فهذه الخصائص تنتمي إلى جدول الوصل — الذي يصبح بدوره كياناً مستقلاً بمسمى خاص.

المخطط الثاني — أنواع العلاقات الثلاثة (متجر إلكتروني)

يُظهر مخطط ERD التالي الأنواع الثلاثة لعلاقات في نموذج واحد لمتجر إلكتروني مبسّط. اقرأ كل خط علاقة باستخدام الدليل أعلاه.

Online Store ERD — One-to-One, One-to-Many, Many-to-Many Customer PK customer_id name email CustomerProfile PK profile_id FK customer_id billing_address preferences Order PK order_id FK customer_id order_date status Product PK product_id product_name price OrderItem (junction) PK item_id FK order_id FK product_id quantity 1 : 1 1 : 0..M 1 : 1..M 1 : 1..M One-to-One One-to-Many Many-to-Many (via junction)
مخطط ERD يُظهر الأنواع الثلاثة للعلاقات: 1:1 بين Customer وCustomerProfile، و1:M بين Customer وOrder، وM:N بين Order وProduct محلولةً عبر كيان الوصل OrderItem.

قراءة المخطط

لنقرأ كل علاقة بلغة بسيطة لممارسة الرمز:

  • 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 ثانٍ لنظام إدارة مكتبة. ادرسه وحاول التعبير عن كل علاقة بلغة بسيطة قبل قراءة الوصف أدناه.

Library System ERD — Relationships and Cardinality Member PK member_id full_name membership_date email Loan PK loan_id FK member_id FK copy_id loan_date | due_date BookCopy PK copy_id FK book_id condition is_available Book PK book_id title | isbn | author genre 1 : 0..M 0..M : 1 1 : 1..M
مخطط ERD لنظام مكتبة: يمكن للعضو امتلاك صفر أو أكثر من الإعارات؛ كل إعارة تتضمن نسخة كتاب واحدة بالضبط؛ كل كتاب له نسخة مادية واحدة أو أكثر.

قراءة مخطط المكتبة:

  • قد يمتلك Member واحد صفراً أو أكثر من Loans (عضو جديد لا إعارات له بعد). كل Loan تنتمي إلى Member واحد بالضبط.
  • قد تظهر BookCopy واحدة في صفر أو أكثر من Loans على مدى عمرها (نسخة لم تُعار قط لها صفر إعارات). كل Loan تغطي BookCopy واحدة بالضبط.
  • للـBook الواحد نسخة مادية واحدة أو أكثر من BookCopies (يجب أن يكون للكتاب نسخة واحدة على الأقل ليكون موجوداً في النظام). كل BookCopy تنتمي إلى Book واحد بالضبط.

خلاصة

  • تحدد القدرة الاستيعابية الحد الأدنى والأقصى لعدد نسخ الكيانات التي تشارك في علاقة ما.
  • يُشفّر رمز قدم الغراب القدرة الاستيعابية بثلاثة رموز عند كل طرف خط: شريط مزدوج (واحد بالضبط)، دائرة (صفر / اختياري)، وتفرع قدم الغراب (كثير).
  • أنواع العلاقات الثلاثة هي 1:1 (نادرة، غالباً لأسباب أمان أو أداء)، و1:M (الأكثر شيوعاً، تُنفَّذ بمفتاح أجنبي)، وM:N (تتطلب جدول وصل).
  • اذكر دائماً كلاً من الحد الأدنى والأقصى للقدرة الاستيعابية — فالحد الأدنى يحدد ما إذا كان المفتاح الأجنبي قابلاً للإهمال وما إذا كانت العلاقة إلزامية.
  • عندما تكون لعلاقة M:N خصائصها الخاصة (درجة، كمية، تاريخ التحاق)، يصبح جدول الوصل كياناً ارتباطياً مستقلاً بحق.