كيف يمكنني فرض سلامة البيانات قواعد في قاعدة البيانات الخاصة بي ؟

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

سؤال

أنا تصميم هذه المجموعة من دروس و ملخصات (MustInherit) الطبقات...

class diagram

هذا هو جدول قاعدة بيانات أين أنا ذاهب لتخزين كل هذا...

database table

بقدر Microsoft SQL Server قاعدة البيانات يعلم كل تلك nullable ("السماح بالقيم الخالية") الأعمدة.

ولكن في الحقيقة هذا يعتمد على فئة المخزنة هناك:LinkNode, HtmlPageNode ، أو CodePageNode.

القواعد قد تبدو هذه...

rules table

كيف يمكنني تطبيق هذه البيانات قواعد التكامل داخل قاعدة البيانات الخاصة بي ؟


تحديث:بخصوص هذا واحد-تصميم الجدول...

أنا لا تزال تحاول صفر في نهائي العمارة.

بدأت في البداية مع العديد من الجداول الصغيرة مع ما يقرب من الصفر nullalbe المجالات.
الذي هو أفضل مخطط قاعدة البيانات أجل الملاحة ؟

و تعلمت عن LINQ to SQL IsDiscriminator الملكية.
ما هي أفضل طريقة للتعامل مع واحدة من العلاقات في SQL ؟

ولكن بعد ذلك علمت أن LINQ to SQL يدعم فقط جدول واحد الميراث.
يمكن LINQ to SQL IsDiscriminator العمود لا وراثة ؟

الآن أنا أحاول التعامل معها مع مجموعة من فئات و فئات مجردة.
الرجاء مساعدتي مع بلدي .صافي فئات مجردة.

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

المحلول

استخدام التحقق من القيود على الطاولة.هذه تسمح لك استخدام أي نوع من المنطقية المنطق (بما في ذلك على القيم الأخرى في الجدول) السماح/رفض البيانات.

من الكتب على الانترنت الموقع:

يمكنك إنشاء تحقق القيد مع أي المنطقية (Boolean) التعبير إرجاع TRUE أو FALSE بناء على العوامل المنطقية.السابقة على سبيل المثال التعبير المنطقي هو:الراتب >= 15000 و الراتب <= 100000.

نصائح أخرى

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

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

على الرغم من أنه لن يكون اقتراحي الأول, يمكنك استخدام جدول واحد الميراث و فرض القيود عن طريق إجراء مخزن.

يمكنك إعداد بعض إدراج/تحديث المشغلات.مجرد التحقق إذا كانت هذه الحقول null أو notnull, و رفض إدراج/تحديث العملية إذا لزم الأمر.هذا هو حل جيد إذا كنت ترغب في تخزين جميع البيانات في نفس الجدول.

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

فريدة من نوعها جدول لكل نوع من العقدة.

لماذا لا نجعل الطبقة كنت بناء إنفاذ سلامة البيانات الخاصة نوع ؟


تحرير

في هذه الحالة يمكنك إما أ) استخدام القيود المنطقية (انظر أدناه) أو ب) الإجراءات المخزنة للقيام إدراج/التعديلات (فكرة جيدة بغض النظر) أو ج) مرة أخرى, فقط لجعل الطبقة فرض سلامة البيانات.

خليط من C & B سيكون مسار الأحداث وأغتنم.كنت قد فريدة من نوعها الإجراءات المخزنة لإضافة/التعديلات لكل نوع عقدة (أيInsert_Update_NodeType) وكذلك جعل الطبقة إجراء التحقق من صحة البيانات قبل حفظ البيانات.

شخصيا كنت دائما تصر على وضع سلامة البيانات المدونة على الطاولة نفسها إما عن طريق تحريك أو تحقق القيد.السبب هو أنك لا تضمن فقط واجهة المستخدم تحديث إدراج أو حذف السجلات.ولا يمكن ضمان أن شخصا ما قد لا يكتب ثانية sp للالتفاف على القيود في الاصلي sp دون فهم البيانات الفعلية سلامة القواعد أو حتى كتابة هذا لأنه أو أنها على علم بوجود sp مع القواعد.الجداول غالبا ما تتأثر DTS أو حزم SSIS ديناميكية الاستفسارات من واجهة المستخدم أو من خلال محلل استعلام أو استعلام أو حتى من المقرر وظائف تشغيل التعليمات البرمجية.إذا كنت لا تضع سلامة البيانات المدونة في الجدول المستوى عاجلا أو آجلا البيانات الخاصة بك وسوف لا يكون لديك النزاهة.

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

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

أنا لست على دراية مع SQL Server, ولكن أنا أعرف مع أوراكل يمكنك تحديد القيود التي يمكن استخدامها للقيام ما كنت تبحث عن.أنا متأكد من أنك يمكن أن تحدد القيود في SQL server أيضا على الرغم من.

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

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

الكيان سلامة ينطبق على التوالي ؛ المجال سلامة ينطبق على مستوى العمود و التكامل المرجعي ينطبق على مستوى الجدول.

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

  2. المجال النزاهة يتطلب مجموعة من البيانات القيم التي تقع ضمن نطاق معين (مجال) من أجل أن تكون صالحة.وبعبارة أخرى, مجال السلامة يحدد يجوز إدخالات لعمود معين عن طريق تقييد نوع البيانات, شكل, أو مجموعة من القيم الممكنة.

  3. التكامل المرجعي هو المعنية مع الحفاظ على العلاقات بين الجداول متزامنة.

@زاك:يمكنك أيضا التحقق من هذا بلوق قراءة المزيد من التفاصيل حول سلامة البيانات إنفاذ هنا- https://www.bugraptors.com/what-is-data-integrity/

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

تقنيا هذا ليس "فرض النظام في قاعدة البيانات" لكن لا أعتقد أن هذا يمكن القيام به في جدول واحد.الحقول إما قبول القيم الخالية أو لا.

فكرة أخرى يمكن استكشاف وظائف SQL والإجراءات المخزنة على أن تفعل الشيء نفسه.ولكن لا يمكن تنفيذ هذا المجال ليكون NOT NULL واحد سجل فارغة لمدة واحدة.أن طبقة رجال الأعمال / العمل في المصنع.

هل حاولت NHibernate?انها أكثر من ذلك بكثير نضجت المنتج من إطار الكيان.انها حرة.

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