سؤال

أقوم بتصميم قاعدة بيانات صغيرة لمشروع شخصي ، وأحد الجداول ، اتصل به C, ، يحتاج إلى وجود مفتاح خارجي لأحد الجدولين ، اتصل بهما A و B, ، تختلف عن طريق الدخول. ما هي أفضل طريقة لتنفيذ هذا؟

الأفكار حتى الآن:

  • قم بإنشاء الجدول مع حقلين مفاتيح خارجية لاغية متصلة بالجائلين.
    • ربما مع الزناد لرفض الإدراج والتحديثات التي من شأنها أن تؤدي إلى 0 أو 2 منها خالية.
  • جدولين منفصلين مع بيانات متطابقة
    • هذا يكسر القاعدة حول تكرار البيانات.

ما هي الطريقة الأكثر أناقة لحل هذه المشكلة؟

هل كانت مفيدة؟

المحلول

أنت تصف تصميمًا يسمى الجمعيات المتعددة الأشكال. هذا غالبا ما يجعل الناس في ورطة.

ما أوصي به عادة:

A  -->  D  <--  B
        ^
        |
        C

في هذا التصميم ، تقوم بإنشاء جدول أوليلي D هذان الاثنان A و B المرجعي. هذا مماثل ل supertype المشتركة في تصميم OO. الآن طاولة طفلك C يمكن الرجوع إلى الطاولة الفائقة ومن هناك يمكنك الوصول إلى الطاولة الفرعية المعنية.

من خلال القيود والمفاتيح المركبة ، يمكنك التأكد من وجود صف معين D يمكن الرجوع إليها فقط بواسطة A أو B لكن ليس كلاهما.

نصائح أخرى

إذا كنت متأكدًا من ذلك C لن يشير إلا إلى أحد الجدولين (وليس واحدًا من N) ، فإن اختيارك الأول هو نهج معقول (وهو واحد استخدمته من قبل). ولكن إذا كنت تعتقد أن عدد أعمدة المفاتيح الخارجية سيستمر في الزيادة ، فهذا يشير إلى وجود بعض التشابه أو التداخل الذي يمكن دمجه ، وقد ترغب في إعادة النظر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top