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

رسم مخطط العلاقات بين الكيانات

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

رسم مخطط العلاقات بين الكيانات

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

تدوين قدم الغراب في لمحة

تمثّل مخططات ERD بتدوين قدم الغراب أربعة مفاهيم بأربعة رموز بصرية:

  • الكيانات — مستطيلات بسيطة. كل صف في جدول قاعدة البيانات الناتج هو نسخة واحدة من الكيان (مثلاً مريض واحد بعينه، موعد واحد بعينه).
  • السمات — مدرجة داخل مربع الكيان. المفاتيح الأولية تُعلَّم بـ PK؛ المفاتيح الأجنبية تُعلَّم بـ FK.
  • العلاقات — خطوط تصل مربعات الكيانات، تحمل عبارة فعلية كتسمية (يحجز، يُجري، يصف).
  • رموز الكمية — تُرسم عند كل طرف من خط العلاقة باستخدام علامات قدم الغراب الموضحة أدناه.

تُشفّر رموز قدم الغراب معلومتين عند كل طرف من الخط: الإلزامية (هل يجب أن تشارك هذه النسخة؟) والحد الأقصى (هل يمكن أن تشارك نسخ كثيرة؟).

Crow-foot cardinality symbol reference Crow-Foot Cardinality Symbol Reference Symbol Meaning Example sentence Exactly one (mandatory) Each Appointment belongs to exactly one Patient Zero or one (optional one) An Employee may have zero or one Office One or many (mandatory many) An Order must contain one or more OrderItems Zero or many (optional many) A Customer may have placed zero or many Orders
رموز الكمية الأربعة في تدوين قدم الغراب: واحد بالضبط، صفر أو واحد، واحد أو كثير، وصفر أو كثير.
كيفية قراءة خط قدم الغراب: قف عند كيان وسر نحو الآخر. الرمز الأول الذي تصل إليه (الأقرب للكيان البعيد) يخبرك بالحد الأقصى (قدم الغراب = كثير؛ شرطة واحدة = واحد). الرمز الثاني (الأبعد عن الكيان البعيد، الأقرب للخط) يخبرك بالحد الأدنى (دائرة = صفر / اختياري؛ شرطة = واحد / إلزامي).

مثال عملي كامل: نظام حجز عيادة طبية

تخيّل عيادة خاصة تحتاج إلى تتبع المرضى والأطباء والمواعيد والعلاجات الموصوفة خلال كل موعد. قواعد العمل المُستخلصة من مقابلات المتطلبات هي:

  1. قد يحجز Patient صفراً أو أكثر من Appointment. كل موعد يجب أن ينتمي إلى مريض واحد بالضبط.
  2. قد يُجري Doctor موعداً أو أكثر. كل موعد يُجريه طبيب واحد بالضبط.
  3. خلال الموعد، قد يصف الطبيب صفراً أو أكثر من Treatment (علاجات). كل علاج يُوصف في موعد واحد بالضبط.
  4. كل علاج يشير إلى Drug (دواء) واحد بالضبط من الصيدلية. قد يظهر الدواء في صفر أو أكثر من العلاجات.

هذه القواعد الأربع تُترجم مباشرةً إلى مخطط ERD أدناه. ادرس كل مربع كيان (الاسم والسمات الرئيسية) وكل خط علاقة (تسمية الفعل) وكل زوج من رموز قدم الغراب عند طرفَي الخط.

Clinic Booking ERD — crow-foot notation PATIENT PK patient_id full_name date_of_birth phone email APPOINTMENT PK appointment_id FK patient_id FK doctor_id appt_date appt_time status notes DOCTOR PK doctor_id full_name specialty license_no phone TREATMENT PK treatment_id FK appointment_id FK drug_id dosage duration_days DRUG PK drug_id brand_name generic_name category (0..*) APPOINTMENT --> books (0..*) APPOINTMENT --> conducts (0..*) TREATMENT --> prescribes (1) DRUG --> references
مخطط ERD بتدوين قدم الغراب لنظام حجز عيادة: Patient وDoctor وAppointment وTreatment وDrug مع رموز الكمية الكاملة.

قراءة المخطط خطوة بخطوة

لنقرأ كل علاقة بصوت عالٍ باستخدام القاعدة "كيان واحد [فعل] صفراً أو أكثر من كيان آخر":

  1. Patient يحجز Appointments: مريض واحد يحجز صفراً أو أكثر من المواعيد (مريض جديد ربما لم يحجز بعد)؛ كل موعد يحجزه مريض واحد بالضبط — الشريطان المزدوجان عند طرف Patient يعنيان إلزامي وواحد فقط.
  2. Doctor يُجري Appointments: طبيب واحد يُجري صفراً أو أكثر من المواعيد؛ كل موعد يُجريه طبيب واحد بالضبط. الدائرة عند طرف Appointment القريب من Doctor تؤكد أن صفر مواعيد مقبول لطبيب جديد التوظيف.
  3. Appointment يصف Treatments: موعد واحد قد يُنتج صفراً أو أكثر من العلاجات (زيارة للفحص قد لا تُفضي إلى وصفة)؛ كل علاج ينتمي إلى موعد واحد بالضبط.
  4. Treatment يشير إلى Drug: علاجات كثيرة عبر مواعيد كثيرة قد تشير إلى دواء ما (صفر أو أكثر)؛ كل علاج يشير إلى دواء واحد بالضبط.
المفاتيح الأجنبية تتبع العلاقة: لاحظ أن كيان الجانب "الكثير" دائماً هو الذي يحمل المفتاح الأجنبي. يحمل APPOINTMENT كلاً من patient_id وdoctor_id (المفتاح الأجنبي يذهب إلى المفتاح الأولي لجانب "الواحد"). ويحمل TREATMENT كلاً من appointment_id وdrug_id. هذه قاعدة عامة — المفتاح الأجنبي يسكن دائماً في الجانب "الكثير".

عملية رسم مخطط ERD خطوة بخطوة

اتبع هذه الخطوات الخمس في كل مرة تُنمذج فيها نطاقاً جديداً:

  1. أَحصِ الكيانات. تفحّص المتطلبات بحثاً عن الأسماء الدائمة — الأشياء التي يجب على النظام تذكّرها بين الجلسات. أزِل الصفات والأفعال والمرادفات المكررة. العيادة تُعطينا: Patient وDoctor وAppointment وTreatment وDrug.
  2. حدّد السمات والمفاتيح الأولية. لكل كيان، اسأل "ما البيانات التي تصف نسخة واحدة منه؟" وأضف مفتاحاً بديلاً أو طبيعياً (مثل patient_id وdrug_id).
  3. حدّد العلاقات. تفحّص المتطلبات بحثاً عن العبارات الفعلية التي تربط كيانين: "طبيب يُجري مواعيد"، "وصفة تشير إلى دواء". سمِّ كل علاقة بفعل قصير بصيغة المبني للمعلوم.
  4. حدّد الكمية. لكل علاقة، اطرح السؤالين الإلزاميين: (أ) هل يمكن لنسخة واحدة من الكيان أ أن ترتبط بنسخ كثيرة من الكيان ب؟ (ب) هل العلاقة إلزامية أم اختيارية؟ أجب عليهما في كل اتجاه ثم ارسم رمز قدم الغراب الصحيح عند كل طرف.
  5. أضف المفاتيح الأجنبية. في الجانب "الكثير" من كل علاقة، أضف المفتاح الأولي للجانب "الواحد" كمفتاح أجنبي (FK). علاقات كثير-إلى-كثير تستلزم كيان وسيط (يُغطّى في الدرس السادس).
السمات التي تبدو كيانات: احذر من قيم مثل specialty أو status. إذا كان النظام يخزّن قيمة نصية فحسب ولا تتعلق بها بيانات أخرى، فهي سمة. أما إذا احتاج النظام إلى تتبع بيانات إضافية عنها (مثل وصف التخصص ورمزه والقسم المرتبط به)، فنمذجها ككيان مستقل مع علاقة.

الكمية من قواعد العمل الحقيقية

القرار بين صفر أو أكثر وواحد أو أكثر، أو بين واحد بالضبط وصفر أو واحد، هو دائماً قرار تجاري لا تقني. اسأل أصحاب المصلحة مباشرةً:

  • "هل يمكن أن يوجد الطبيب في النظام قبل أن يُجري أي موعد؟" → نعم → صفر أو أكثر عند طرف Appointment.
  • "هل يجب أن ينتمي كل سجل علاج إلى موعد، أم يمكن وجود وصفات مستقلة؟" → يجب أن ينتمي → واحد بالضبط عند طرف Appointment في علاقة Treatment.
  • "هل يمكن تسجيل دواء في الصيدلية قبل وصفه لأي مريض؟" → نعم → صفر أو أكثر عند طرف Treatment.

وثِّق إجابة كل سؤال في قاموس البيانات (الدرس التاسع) إلى جانب مخطط ERD. ذلك الأثر الورقي لا يُقدَّر بثمن حين يطعن مطوّر أو مدير قاعدة بيانات في اختيار كمية ما بعد ستة أشهر من إطلاق المشروع.

اختيار الأداة: يستخدم المحللون المحترفون Lucidchart وdraw.io وMicrosoft Visio وdbdiagram.io والعرض البياني ERD في MySQL Workbench. لجلسة سريعة على السبورة البيضاء، كل ما تحتاجه قلم ماركر والرموز الأربعة لقدم الغراب. عملية التفكير متطابقة بغض النظر عن الأداة.

أخطاء شائعة وكيفية تجنبها

  • وضع المفتاح الأجنبي في الجانب الخطأ. المفتاح الأجنبي ينتمي دائماً لكيان الجانب "الكثير". إذا وجدت نفسك تضع appointment_id في صف Patient فأنت وضعته في الجانب "الواحد" — اعكسه.
  • الخلط بين الاختياري وصفر الكمية. "اختياري" لا يعني غياب العلاقة؛ يعني عدم وجود نسخ مرتبطة حالياً. الكيان نفسه موجود لكن لا توجد صفوف مطابقة في الجهة الأخرى بعد.
  • نمذجة السمات المشتقة. العمر مشتق من تاريخ الميلاد؛ لا تخزّن كليهما إلا بمبرر أداء محدد. خزِّن البيانات المصدر واحسب المشتقة في الاستعلامات.
  • الازدحام في كيان واحد. إذا كان لكيان أكثر من 20 سمة، افحص ما إذا كان يخفي اهتمامين منفصلين يجب تقسيمهما إلى كيانين بعلاقة واحد-إلى-واحد أو واحد-إلى-كثير.

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