سؤال

أدرك أن هذا السؤال قد يبدو قليلا على الجانب "الأخضر"، ولكن بعد عدد قواعد البيانات "المؤسسة" أو "التجاري" التي واجهتها قد بدأت في طرح هذا السؤال. ما هي مزايا القيود التي توفر قاعدة بيانات؟ أنا أسأل المزيد عن القيود الرئيسية الأجنبية بدلا من القيود الفريدة. هل تقدمون مكاسب الأداء، أو مجرد تكامل البيانات؟

لقد فوجئت إلى حد ما بعدد قواعد البيانات العلائقية دون مفاتيح أجنبية أو حتى بدون مفاتيح أساسية محددة (مجرد قيود على الحقول غير فارغة أو قيد فريد في الحقل).

أفكار؟

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

المحلول

"فقط" سلامة البيانات؟ أنت تقول أن هذا شيء بسيط. في جميع التطبيقات، إنه أمر بالغ الأهمية. نعم، ينص على ذلك، وهي فائدة كبيرة.

نصائح أخرى

تكامل البيانات هو ما يقدمونه. إذا كان لديك أي شيء لديهم تكلفة أداء (واحد صغير جدا على الأقل).

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

ما يلي، على افتراض أنك تحصل على القيد في المقام الأول: -

  • ستكون بياناتك صالحة فيما يتعلق بالقيد
  • قاعدة البيانات تعرف أن بياناتك ستكون صالحة فيما يتعلق بالقيد ويمكنها استخدام هذا عند الاستعلام عن قاعدة البيانات أو تحديثها (مثل إزالة انضمام غير ضروري للاستعلام عن طريقة عرض)
  • يتم توثيق القيد للمستخدمين في المستقبل من قاعدة البيانات
  • سيتم القبض على انتهاك للقيد في أقرب وقت ممكن؛ ليس في بعض العملية غير ذات صلة في وقت لاحق فشل

في نظرية العلائقية، لا تسمح قاعدة البيانات التي تتيح لبيانات غير متناسقة بالفعل قاعدة بيانات علائقية. مفاتيح أجنبية ضرورية لنزاهة البيانات والاتساق للحفاظ على قاعدة البيانات "العلائقية"؛ أي النموذج المنطقي لقاعدة البيانات هو دائما صحيح.

من الناحية العملية، من الأسهل عادة تحديد مفتاح أجنبي واترك مقبض محرك DB يتأكد من أن العلاقة صالحة. الخيارات الأخرى هي:

  • لا شيء - فساد بيانات مضمون في مرحلة ما
  • مشغلات DB - والتي عادة ما تكون أبطأ وأقل أداء
  • رمز التطبيق - الذي سيؤدي في النهاية إلى ظهور مشاكل عند نسي إما أن تنسى الإشارة إلى التعليمات البرمجية اليمنى أو تطبيق آخر يصل إلى قاعدة البيانات.

البيانات هي الأصل. الكثير من الكتب المدرسية الدولة.

لكنه في الواقع خطأ. يجب أن يقول "البيانات الصحيحة هي الأصل، البيانات غير الصحيحة هي المسؤولية".

وقيود قاعدة البيانات تعطيك أفضل ضمان ممكن أن البيانات صحيحة.

في بعض DBMSS (مثل Oracle) يمكن أن القيود في الواقع يحسن أداء بعض الاستفسارات، نظرا لأن OptImiser يمكنه استخدام القيود اللازمة لكسب المعرفة حول هيكل البيانات. لبعض الأمثلة، انظر مقالة مجلة أوراكل.

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

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

أنت لا تذكر القيود الأخرى ولكن يجب عليك. يجب دائما تطبيق أي قاعدة عمل يجب تطبيقها دائما على جميع البيانات الموجودة في الجدول في قاعدة البيانات من خلال DataType (مثل DataTime DataType الذي لا يقبل Willnot '02 31 2009 'كمتاجر صالح)، وهو قيد (أقول واحد لا يسمح لهذا المجال بمقيمة أكبر من 100) أو من خلال الزناد هو المنطق معقدة للغاية ولا يمكن التعامل معها بواسطة قيود عادية. (المشغلات صعبة للكتابة إذا كنت لا تعرف ما تفعله، لذلك إذا كان لديك منطق هذا المجمع، فأنت نأمل أن يكون لديك أباتاباس محترف في فريقك.) النظام مهم ل. البيانات DataTypes هي الخيار الأول، تليها القيود، تليها المشغلات كخيار أخير.

رمز التطبيق Simpler

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

get department number for employee  # it's good coz of constraints
do something with department number

ضد.

get department number for employee
if department number is empty
    ...
else if department number not in list of good department numbers
    ....
else
    do something with department number

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

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

تكون قيود النزاهة مهمة بشكل خاص عند دمج العديد من التطبيقات باستخدام قاعدة بيانات مشتركة.

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

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

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

يجب أن تؤخذ دائما في الاعتبار عند "Laxing" أو "إزالة" أي قيود معلنة.

بخلاف ذلك، أنت بالطبع صحيح تماما.

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