كيف يمكنني إنشاء (نوع بطاقة الهوية) (المعروف أيضا باسم 'متعددة الأشكال')- الخارجية عمود المفتاح في مرض التصلب العصبي المتعدد الوصول ؟

StackOverflow https://stackoverflow.com/questions/154209

  •  03-07-2019
  •  | 
  •  

سؤال

في روبي على القضبان ، وهذا ما يسمى "متعددة الأشكال الجمعيات."

لدي عدة Commentable في تطبيق الجداول لكل أدناه:

Post
id | title | text | author (FK:Person.id) | ...

Person
id | name | ...

Photo
id | title | owner (FK:Person.id) | path | ...

أود أن أضيف Comments الجدول على النحو التالي:

Comments
id | commentable_type | commentable_id | text | author (FK:Person.id)

أنا أفهم أن فقدت قاعدة البيانات التكامل المرجعي بهذه الطريقة ، لكن الخيار الآخر الوحيد هو أن يكون متعددة Comments الجداول: PostComments, PersonComments, PhotoComments, ...

والآن السؤال:

كيف يمكن بناء شكل جروك كيفية القيام البحث أولا عن طريق الحصول على اسم الجدول من Comments.commentable_type ثم معرف من Comments.commentable_id?

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

المحلول

هذا الأسلوب هو معروف بالعامية في SQL العالم 'subclassing'.على مثال عمل (SQL Server الجملة ولكن تكييفها بسهولة ل MS Access) ، ديفيد بورتا بلوق..

في السيناريو الخاص بك ، بنود البيانات المشتركة بين جميع تعليقات في تعليقاتكم الجدول ؛ أي شيء محدد لكل نوع سيكون المتخصصة في الجداول مثل PhotoComments ، إلخ.ملاحظة FK يجب أن يكون اثنين عمود مركب الهوية بالإضافة إلى نوع ، الأمر الذي غالبا ما يتم تجاهله ولكن من الضروري التكامل المرجعي هنا مثلاكنت لا تريد شيئا كتبته في صورة التعليق الظهور في PersonComments الجدول.

نصائح أخرى

أعتقد أن الكثير من الناس جعل الفوقية الجداول لهذا النوع من الشيء.بالضبط كما وصفته.

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