من مخطط الأصناف إلى قاعدة البيانات والكود
من مخطط الأصناف إلى قاعدة البيانات والكود
مخطط الأصناف ليس مجرد توثيق — إنه مخطط تنفيذي. عندما يستقر نموذج المجال، يمكن ترجمته بشكل منهجي إلى نتيجتين تهمان المطورين أكثر من غيرهما: مخطط قاعدة البيانات العلائقية وهياكل أكواد المصدر. فهم هذه الترجمة من أعمق المهارات العملية التي يمكن لمحلل الأنظمة اكتسابها، لأنها تجسر الهوّة بين التحليل والتنفيذ.
لماذا يهم التحويل؟
كثيرًا ما يتسلّم المطورون مخطط أصناف من المحللين ويضطرون إلى بناء قاعدة بيانات وكود منه. حين تُطبَّق قواعد الترجمة بشكل متسق، تنتج جداول تعكس المجال وعلاقات تطابق الارتباطات وملفات أصناف تشتق حقولها ومناهجها مباشرةً من النموذج. أما الأخطاء في الترجمة — كإهمال التعددية أو إغفال صنف ارتباط — فتكون مكلفة إذا اكتُشفت بعد تراكم البيانات.
القاعدة الأولى — كل صنف يصبح جدولًا
يتحول كل صنف ملموس في المخطط إلى جدول. يصبح اسم الصنف اسمًا للجدول (عادةً بصيغة الجمع في التطبيق). وكل خاصية تصبح عمودًا، ويُحوَّل نوع UML إلى نوع قاعدة بيانات:
String→VARCHARInteger→INTBoolean→TINYINT(1)أوBOOLEANDate/DateTime→DATE/DATETIMEDecimal→DECIMAL(p,s)
يحصل كل جدول أيضًا على مفتاح رئيسي بديل (id) ما لم يحدد النموذج مفتاحًا طبيعيًا. في الكود، يصبح الصنف ملفًا يحوي حقولًا خاصة ومناهج قراءة/كتابة.
القاعدة الثانية — الارتباطات تصبح مفاتيح خارجية
تحدد التعددية في الارتباط موضع المفتاح الخارجي بدقة:
- واحد إلى كثير (1 → 0..*) — يُوضع المفتاح الخارجي في جانب الكثير. مثلًا:
Orderينتمي إلىCustomerواحد، فيضاف عمودcustomer_idإلى جدولorders. - واحد إلى واحد (1 → 0..1) — يُوضع المفتاح الخارجي في الجانب الأضعف أو الاختياري، مع قيد UNIQUE.
- كثير إلى كثير (* → *) — يستلزم جدول وسيط يحمل مفتاحين خارجيين ومفتاحًا رئيسيًا خاصًا.
في الكود، يصبح ارتباط واحد-إلى-كثير حقل مجموعة على جانب الواحد (مثل List<Order> orders) وحقل مرجعي على جانب الكثير (مثل Customer customer).
القاعدة الثالثة — التجميع والتركيب
يُعامَل التجميع معاملة الارتباط العادي في قاعدة البيانات — مفتاح خارجي في جانب الجزء أو جدول وسيط للكثير-إلى-كثير. أما التركيب فيعبّر عن ملكية أقوى: لا يوجد الجزء بدون الكل. في قاعدة البيانات، أضف ON DELETE CASCADE إلى المفتاح الخارجي حتى تُحذف الأجزاء تلقائيًا عند حذف الكل.
order_items.القاعدة الرابعة — استراتيجيات تعيين الوراثة
للوراثة ثلاث استراتيجيات شائعة في قواعد البيانات العلائقية:
- وراثة الجدول الواحد (STI) — جدول واحد لكامل التسلسل الهرمي مع عمود تمييز
type. بسيطة لكنها تهدر مساحة بسبب الأعمدة الفارغة. - وراثة الجدول لكل صنف (CTI) — جدول لكل صنف في التسلسل؛ المفتاح الرئيسي لجدول الصنف الفرعي هو أيضًا مفتاح خارجي إلى الجدول الأصلي. مُعيَّر لكن يتطلب JOINs.
- وراثة الجدول الملموس — جدول لكل صنف ورقي فقط مع تكرار خصائص الأصل. قراءة سريعة لكن بتكرار بيانات.
payments الأصلي.القاعدة الخامسة — أصناف الارتباط تصبح جداول وسيطة
عندما تحمل علاقة كثير-إلى-كثير خصائص خاصة (صنف ارتباط)، تصبح تلك الخصائص أعمدة في الجدول الوسيط. في المثال السابق، يحمل OrderItem خصائص quantity وunitPrice: تصبح هذه أعمدة في جدول order_items إلى جانب المفتاحين الخارجيين.
القاعدة السادسة — الأصناف المجردة والواجهات
لا تحصل الأصناف المجردة على جدول خاص بها في استراتيجية الجدول الملموس، لكنها تحصل على جدول في CTI. أما الواجهات فلا تقابلها أي بنية في قاعدة البيانات — فهي مفهوم كودي خالص. في الكود، تصبح الأصناف المجردة تعريفات abstract class وتصبح الواجهات تعريفات interface بتواقيع مناهج بدون جسم تنفيذي.
مثال على هيكل الكود
الترجمة إلى كود بنفس القدر من الانتظام. تأمل صنف Order من المتجر الإلكتروني. يبدو الهيكل الأساسي المشتق من مخطط الأصناف هكذا:
لاحظ كيف يصبح كل وصف UML حقلًا خاصًا، وكل ارتباط حقل مرجع أو مجموعة، وكل عملية UML منهجًا. يفرض المُنشئ الارتباط الإلزامي: لا طلب بدون زبون.
OrderItem → order_items). تجنب التسمية التعسفية بين النموذج والتنفيذ.
Address داخل Customer) كمجموعة حقول نصية في الصنف الأصلي. هذا يكسر التطبيع ويخفي البنية. نمذجه كصنف مستقل، ثم قرر في قاعدة البيانات هل يستحق جدولًا خاصًا أم تُدمج أعمدته في الجدول الأصلي — لكن اجعل ذلك قرارًا واعيًا.
قائمة مراجعة: من مخطط الأصناف إلى قاعدة البيانات
- كل صنف ملموس ← جدول واحد.
- كل خاصية ← عمود واحد بالنوع SQL الصحيح.
- ارتباط واحد-إلى-كثير ← مفتاح خارجي في جدول جانب الكثير.
- ارتباط كثير-إلى-كثير (بصنف ارتباط أو بدونه) ← جدول وسيط بمفتاحين خارجيين.
- التركيب ← أضف
ON DELETE CASCADEللمفتاح الخارجي. - الوراثة ← اختر STI أو CTI أو جدول ملموس وطبّق بالتزام.
- الأصناف المجردة ← جدول فقط في CTI (يحمل الأعمدة المشتركة).
- الواجهات ← لا جدول، لا أعمدة — كود فحسب.
بهذه القواعد في يدك، يمكنك تسليم مطوّر مخططَ أصناف وورقة قرارات التحويل، ليتمكن من بناء قاعدة بيانات وبنية كود صحيحة دون تخمين. هذه الدقة هي سمة المحلل الاحترافي.