سؤال

لدي التالية في مخطط قاعدة البيانات:

  • BillingReferences (ReferencingType tinyint, ReferencingId tinyint, ReferencedType tinyint, ReferencedId tinyint, IsActive بت) - حيث جميع المجالات (عدا IsActive) هي جزء من فهرس فريد.
  • BillingType (BillingTypeId tinyint, الاسم varchar(50))

ReferencingType و ReferencedType هو المفتاح الخارجي من BillingTypes.BillingTypes يحتوي على الصفوف التالية:

BillingTypeId | اسم

1 | التسميات

2 | البلدان

3 | PaymentProviders

4 | PaymentOptions

5 | البنوك

ReferecingId و ReferencedId تمثل هوية واحدة من الكيانات التالية (يعتمد على مرجعية/الرجوع نوع):

  • البنوك (BankId tinyint, الاسم varchar(50))
  • البلدان (CountryId tinyint, الاسم varchar(50))
  • التسميات (LabelId tinyint, الاسم varchar(50))
  • PaymentProviders (PaymentProviderId tinyint, الاسم varchar(50))
  • PaymentOptions (PaymentOptionId tinyint, الاسم varchar(50))

في المستقبل كل كيان سيكون لديك المزيد من أعمدة مختلفة إضافة ولكن الآن هذا هو المخطط البساطة.

هناك اتصال من (1-) بين كل كيان (باستثناء البلدان) أن البلدان.التسميات اتصال من (1-) إلى البنوك ، PaymentProviders و PaymentOptions.و PaymentProviders اتصال من (1-*) إلى PaymentProviders

هكذا على سبيل المثال إذا كنت ترغب في الاتصال البنك مع BankId 201 إلى بلد CountryId 3003 سوف يكون لي سجل في BillingReferences التي سوف تبدو مثل هذا:ReferencingType = 5 ReferencingId = 201 ReferencedType = 2 ReferencedId = 3003 IsActive = 1

لم يكن لدينا اتصال/الجدول المرجعي لكل نوع من الاتصال بسبب extendability النظر - إذا أردنا أن نضيف كيان آخر كل ما علينا فعله هو إضافة الجدول و إضافة سجلات في BillingReferences و BillingType.

المشكلة هي أنني لا أستطيع تكوين المشروط الأجنبية الرئيسية بين BillingReferences و كل الكيانات و لا أستطيع تكوين/اعرض الخريطة مع EntityFramework إما...

كنت غير قادر على العثور على أي التعليمي أو المثال الذي يستخدم هذا النوع من التنفيذ.أنا ملزمة لإنشاء الجدول المرجعي لكل اتصال ، أو هل هناك طريقة تكوين هذا مع EntityFramework?

شكرا للمساعدة :)

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

المحلول

AFAIK هناك ليست طريقة للقيام بذلك.

كنت أذهب مع خلق منفصل جدول لكل نوع ، ما لم يكن لديك سبب وجيه لعدم.بالنظر ذكرت ليست جيدة ، IMHO.

وجود أكثر من الجداول لا تسمح لك لوضع قيود المفاتيح الخارجية على المفاتيح الخاصة بك ، فإنه يترجم بشكل جيد في EF.كما أنه يساعد على الأداء:مؤخرتك الكبيرة الجدول المرجعي مليون الصفوف سوف يستغرق مزيدا من الوقت الاستعلام من أكثر الجداول الصغيرة (إلا إذا كنت تريد دائما كل مراجع نوع).

نصائح أخرى

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

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

الطريقة الوحيدة التي يمكنك تحقيق ما تريده هو بناء الزناد التعامل مع معالجة على الملقم.لا يمكنك خريطة FK هكذا إلى جداول متعددة.ولكن الزناد يمكن التعامل مع هذا المنطق.بالطبع هذا سيكون تماما خارج EF...

كما أنصح لك بناء جدول منفصل لكل نوع.أبسط للحفاظ على المدى الطويل أعتقد.

أعتقد أنا ستعمل المستخدم Inferis اقتراح إنشاء طاولة منفصلة لكل نوع.

أشكركم على الإجابات الخاصة بك - أنها ساعدت الكثير :)

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

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