تصميم قاعدة البيانات/الكيان:جدول مرتبط بأي واحد من الجداول المتعددة

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

سؤال

أ تقرير يمكن أن يكون لها مخططات متعددة.ال جدول يبدو الجدول كما يلي:

  • جدول -- بطاقة تعريف, معرف الرسم البياني, معرف التقرير, ...

ال معرف الرسم البياني أعلاه يمكن تعيين ل معرف الرسم البياني إما ل واحد من أنواع المخططات التالية:

  • خط: معرف الرسم البياني, سماكة, يامحور, المحور X, لون, ...
  • فطيرة: معرف الرسم البياني, نصف القطر, لون, ...
  • حاجِز: معرف الرسم البياني, عرض, لون, حدود, ...

أنا أستخدم SQL Server ولسوء الحظ فإن الحلول البديلة مثل استخدام CouchDB وما إلى ذلك ليست خيارات قابلة للتطبيق.أنوي أيضًا تعيين هذه الجداول للكيانات التي تستخدم Entity Framework.

هذا التصميم هو أول طعن لي وأرى مشاكل متعددة في هذا التصميم:

  1. جدول.معرف التقرير لا يمكن أن يكون مفتاحًا خارجيًا على جداول متعددة، لذا فإن فرض FK يمثل مشكلة.
  2. عند تشغيل استعلام SQL (أو Linq)، سيتعين علي إجراء استعلامين للحصول على نوع المخطط ثم الاستعلام عن هذا الجدول.أو، سأضطر إلى تشغيل ينضم مقابل جميع الجداول للحصول على بيانات الرسم البياني.
  3. عند إجراء صلة مقابل أنواع المخططات، فإن معرف الرسم البياني عبر هذه الجداول يجب أن تكون فريدة من نوعها جدول.معرف الرسم البياني خرائط لواحد فقط من خط.معرف الرسم البياني أو حاجِز.معرف الرسم البياني أو فطيرة.معرف الرسم البياني.
  4. سيكون تعيين هذا باستخدام EF أمرًا صعبًا.

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

هل أنا على الطريق الصحيح مع التصميم؟وإذا كان الأمر كذلك، فكيف يمكن التغلب على المشكلات المذكورة أعلاه (FK، والانضمام، والمعرف الفريد عبر جداول متعددة، ورسم الخرائط).

حل

هذا إجابة هو شامل تماما حول الاستراتيجيات.ومقالة فريق SQL حول تنفيذ وراثة الجدول في SQL Server حصلت لي حيث أردت.

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

المحلول

هل فكرت في وضع المخططات في نفس الجدول واستخدام الجدول حسب الميراث الهرمي نمط؟يوضح الرابط كيفية تنفيذ ذلك في Entity Framework.يعتمد ما إذا كان قابلاً للتطبيق أم لا على مدى اختلاف جميع أنواع المخططات هذه وعدد الحقول التي سيحتاجها كل منها.

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

نصائح أخرى

سأتعامل مع هذا من خلال مخطط وراثة الجدول:

Chart (ChartId, ChartTypeId)
   PK (ChartId, ChartTypeId)
   CHECK ChartTypeId IN ('Line', 'Bar', 'Pie')

LineChart (ChartId, ChartTypeId)
   PK (ChartId, ChartTypeId)
   FK (ChartId, ChartTypeId) -> Chart
   CHECK ChartTypeId IN ('Line')

لإضافة مخطط، عليك أولاً إضافته إلى جدول المخطط "الأساسي"، ثم إلى جدول المخطط "النوع الفرعي" المناسب.قيود الفحص تبقي كل شيء في صفه.

المخططات الخطية.المخططات الدائرية والمخططات الشريطية هي أشكال متخصصة من المخططات.

ابحث عن "النمذجة العلائقية التخصصية العامة" للحصول على مقالات جيدة حول هذا النمط.

أو ، سأضطر إلى تشغيل الانضمام ضد جميع الجداول للحصول على بيانات الرسم البياني.

نعم، وهذا جيد.

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