SQL: واحد يشير المفتاح الخارجي المفتاح الأساسي في واحدة من العديد من الجداول

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

سؤال

وأنا أعمل على تطبيق التي سيتم استخدامها كإطار للمد لتطبيقات أخرى.

واحدة من الطبقات الأساسية يسمى عقدة، والعقد يكون المحتوى. جداول SQL تبدو مثل هذا:

والجدول عقدة (NODEID كثافة، .... الخ)

والجدول NodeContentRelationship (NODEID كثافة العمليات، ContentType سلسلة، ContentId كثافة العمليات)

وسيكون الأمر متروكا للمطورين توسيع نطاق تطبيق لإنشاء أنواع المحتوى الخاصة بهم.

ومن الواضح أن هذا أمر سيء من وجهة نظر قاعدة بيانات العلاقة نظر كما أنه ليس من الممكن أن تضيف علاقة مفتاح خارجي لNodeContentRelationship.ContentId، على الرغم من أنه هو عمود المفتاح الخارجي.

ومع ذلك، فإن الحل بسيط جدا وقوية جدا وأنا مترددة في تغييره.

ما رأيك؟ - أنا في لعالم من الألم أسفل الطريق

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

المحلول

لماذا من المستحيل تحديد NoteContentRelationship.ContentId كمفتاح أجنبي؟ يمكنك بسهولة استخدام نموذج الميراث العلائقية مع Content الجدول يمثل الفئة الأساسية مجردة، والجداول المختلفة AnimalContent، CarContent، الخ يمثلون الفئات المشتقة منها.

نصائح أخرى

الداخلية منصة تأثير .

إذا كنت تحاول بناء "إطار للمد" التي تسمح للمطورين لتخزين بيانات مختلفة "أنواع المحتوى" و تتصل مع بعضها البعض بطريقة عامة، قد تجد أن الآخرين لديهم بالفعل على حل <لأ href =" http://www.oracle.com/index. أتش تي أم أل "يختلط =" noreferrer "> href="http://www.mysql.com/" rel="noreferrer"> مشكلة .

وهذا يبدو لي مثل الاختلاف على EAV (الكيان، سمة، القيمة) تصميم.

ولقد تم توثيق مزايا وعيوب التصميم EAV على نطاق واسع.

وهنا هو وصف لEAV من وجهة نظر متعاطفة نظر:

http://ycmi.med.yale.edu /nadkarni/Introduction٪20to٪20EAV٪20systems.htm

وهنا هو واحد من وجهة نظر معادية للرأي:

HTTP: // tonyandrews .blogspot.com / 2004/10 / otlt و-EAV-اثنين-كبير-تصميم-mistakes.html

ويكون على بينة من الجانب السلبي من EAV قبل ارتكاب آلاف ساعة عمل في صب البيانات فيه. انها مغرية جدا للمبرمجين، ولكن يمكن أن تصبح كابوس مدير البيانات و.

وأنت في لعالم يصب أسفل الطريق إذا كنت تريد من أي وقت مضى أن يقدم في الواقع على هذه البيانات. كنت للتو كثيرا أصعب بكثير لكتابة ينضم وكذا. عدم وجود قيود سيئة، ولكن العمل الإضافي اللازم على استعلامات هو (IMHO) أسوأ.

ولكن، إذا كنت تريد مطورين آخرين لتكون قادرة على تقديم بيانات النظام وتخزينها في قاعدة البيانات ولكن لن تكون قادرة على تغيير مخطط قاعدة البيانات، قد لا يكون هناك خيار آخر. في هذه الحالة، فإن الجواب هو لتقليل مقدار يحصل المخزنة بهذه الطريقة. هل يمكن أيضا تسريع العملية قليلا عن طريق استبدال ContentType مع ContentTypeId المحددة في جدول آخر.

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