سؤال

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

أعتقد أن هذا سوف يقع في العديد من الأسئلة الفرعية:

  1. متى تكون النزاهة المرجعية غير مناسبة؟
  2. هل من المناسب أن يكون لديك حقول تحتوي على مجموعات فرعية متعددة و/أو غير مكتملة من قائمة المفتاح الخارجي؟
  3. عادة ، هل يجب أن يكون هذا قرار تصميم هيكل المخطط أو قرار تصميم الواجهة؟ (أو ربما لا أو كليهما)

أفكار؟

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

المحلول

متى تكون النزاهة المرجعية غير مناسبة؟

التفاعل المرجعي إذا لم يتم استخدامه عادة في مستودعات البيانات حيث تكون البيانات عبارة عن نسخة قراءة فقط من DATBASE المعاملات. مثال آخر على متى لا تحتاج إلى RI هو عندما تريد تسجيل المعلومات التي تتضمن معرفات الصف ؛ الحفاظ على السلامة المرجعية لجدول سجل القراءة فقط هو مضيعة لقاعدة البيانات النفقات العامة.

هل من المناسب أن يكون لديك حقول تحتوي على مجموعات فرعية متعددة و/أو غير مكتملة من قائمة المفتاح الخارجي؟

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

عادة ، هل يجب أن يكون هذا قرار تصميم هيكل المخطط أو قرار تصميم الواجهة؟ (أو ربما لا أو كليهما)

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

فقط أفكاري.

نصائح أخرى

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

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

من خلال "قواعد التحقق من الصحة" ، أتحدث عن قواعد مثل "العناصر في CART> 0". قد ترغب أو لا تريد قواعد التحقق من الصحة. لكنني أعتقد أن المفاتيح الأولية/الأجنبية مهمة دائمًا (أو يمكنك أن تجد لاحقًا أنك تتمنى أن تحصل عليها). أعتقد أنها مطلوبة إذا كنت تريد القيام بتكرار في مرحلة ما.

  1. متى تكون النزاهة المرجعية غير مناسبة؟

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

  2. هل من المناسب أن يكون لديك حقول تحتوي على مجموعات فرعية متعددة و/أو غير مكتملة من قائمة المفتاح الخارجي؟

    تكرار البيانات بهذه الطريقة يتعارض مع مفهوم التطبيع. هناك مزايا وعيوب لهذا النهج.

  3. عادة ، هل يجب أن يكون هذا قرار تصميم هيكل المخطط أو قرار تصميم الواجهة؟ (أو ربما لا أو كليهما)

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

ستكون النزاهة المرجعية مناسبة دائمًا إذا لم تصل إلى تكلفة الأداء وقابلية التوسع و/أو ميزات أخرى.

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

  1. أبدًا ، على الرغم من أن عدد قليل من الأشخاص في NOSQL ، فإن عوالم العناوين المتعددة ، و OO-DB ستشعر بشكل مختلف. لا تستمع إليهم ، إنهم مخطئون.
  2. نعم. على سبيل المثال ، إذا تم تحديد مركبة بشكل فريد على أنها (Lotid ، Vin) ، فإن Lotid هو مفتاح خارجي لجدول Lot. إذا كنت ترغب في العثور على جميع الصور لكثير ، فيمكنك الانضمام إلى جدول MOTURE_PICTURES مباشرة إلى جدول LOT ، باستخدام مجموعة فرعية من مفتاح MOUNT_PICTURES (Lotid في (Lotid ، VIN)). أو ، هل أنا لا أفهمك؟
  3. المخطط ، الواجهة تأتي في المرتبة الثانية. إذا كان المخطط سيئًا ، فإن وجود واجهة لطيفة ليس هدفًا طويل الأجل.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top