العلاقة بين طاولات مزود عضوية ASPNET وجداول عضوية مخصصة

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

  •  11-09-2019
  •  | 
  •  

سؤال

ذهبت من خلال مزود ملف تعريف مخصص مثال منذ فترة وأنا الآن إعادة النظر في ذلك.

تحتوي قاعدة البيانات الخاصة بي على جميع جداول dbo.aspnet_ * التي تم إنشاؤها عند تشغيل معالج تسجيل ASPNET. في هذه الجداول لدي ASPNET_PROFILE التي لديها عائق FK مشيرا إلى ASPNET_USERS.

لدي أيضا طاولتان في MyDB: أول، dbo.profiledata، لديه قيود مفتاح أجنبي يشير إلى dbo.profile.

ما أريد أن أفهمه هو كيف تتعلق الجداول في MyDB بتلك الموجودة في dbo.aspnet_ *. لا ينبغي أن يكون هناك قيد مفتاح أجنبي (أو نوعا من العلاقة) بين جداول الملف الشخصي في MyDB وجداول ASPNET؟ بعض النقاش حول كيفية ارتباط جداولي المخصصة المتعلقة بأولئك المقدمة من ASPNET رائعة.

شكرا مقدما.

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

المحلول

هناك خياران أستطيع أن أرى، كلاهما سيؤدي إلى أساسه بنفس النتيجة:

  • fk من dbo.aspnet_User.UserID ل dbo.Profile.UserID, ، ثم حدد مفتاح فريد dbo.Profile.UserID (ما لم تستخدمه كعمود PK ل dbo.Profile)

  • fk من dbo.aspnet_Profile.ProfileID ل dbo.Profile.ProfileID

dbo.aspnet_User منطقيا 1 - 1 مع dbo.aspnet_Profile, ، لذلك لا يهم حقا الطريقة التي تستخدمها لأنك ستظل تحصل على نفس السلامة العلائقية.

إذا كنت تستبدل جدول بيانات الملف الشخصي القياسي بتنفيذك الخاص، فسيكون من المنطقي استخدام الاقتراح الأول، وإلا فإنك إذا كنت تقوم بتوسيع مخطط ملف التعريف، فاستخدم الاقتراح الثاني.

تعديل

aspnet_Profile هو الجدول القياسي - المعيار SqlProfileProvider يخزن بيانات ملف تعريف المستخدم ككنس خاصية متسلسلة في aspnet_Profile, ، وبالتالي لماذا لا يوجد منفصلة aspnet_ProfileData الجدول كذلك.

يسمح هذا النهج بتخصيص مخطط الملف الشخصي بسهولة للتطبيقات المختلفة دون طلب أي تغييرات على قاعدة البيانات الأساسية، وهو الحل الأمثل للإطار مثل .NET. العيب هو أن SQL Server لا يحتوي على سهولة الوصول إلى هذه البيانات على الإطلاق، لذلك من الصعب الفهرس والتحديث والاستعلام عن بيانات الملف الشخصي للمستخدم باستخدام T-SQL ومنطق التعيين.

النهج الأكثر شيوعا التي رأيتها لإزالة هذا القيد هو تمديد المعيار SqlProfileProvider للكتابة إلى جدول بيانات ملف تعريف مخصص يحتوي على أعمدة محددة خصائص ملف التعريف الخاصة بالتطبيق. يحتوي هذا الجدول بشكل طبيعي على علاقة 1-1 مع طاولة ASPNET_PROFILE، لذلك تتمتع بمفتاح أجنبي كما هو موضح أعلاه.

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

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

أعتقد دائما أن من الأفضل ترك جداول العضوية القياسية AS-IS-IS، وتمتد عند الضرورة باستخدام جداول جديدة مع المفاتيح الأجنبية المناسبة، ثم الفئة الفرعية للمزود المناسب وتجاوز أساليب المزود مع التنفيذ الخاص بك (الدعوة إلى التنفيذ الأساسي أينما كان ذلك ممكنا ).

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