سؤال

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

لقد قمت بالاطلاع على بعض المقالات المثيرة للاهتمام والبحث عبر Google للحصول على فوائد عملية.وهنا بعض الروابط:

http://www.mssqltips.com/tip.asp?tip=1296

أردت معرفة المزيد عن فوائد FK (بصرف النظر عن الهيكلة الرسمية والحذف/التحديث المتتالي الشهير).

  • لا يتم "فهرسة" FK افتراضيًا، فما هي الاعتبارات التي يجب مراعاتها أثناء فهرسة FK؟

  • كيفية التعامل مع الحقول الفارغة التي تم تعيينها كمفتاح خارجي - هل هذا مسموح به؟

  • بصرف النظر عن الفهرسة، هل يساعد هذا في تحسين خطط تنفيذ الاستعلام في SQL-Server؟

أعلم أن هناك المزيد ولكني أفضل أن يتحدث الخبراء في هذا الشأن.فأرشدوني.

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

المحلول

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

نصائح أخرى

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

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

تحافظ قيود FK على اتساق بياناتك.هذا كل شيء.هذه هي الفائدة الرئيسية.لن توفر لك قيود FK أي مكاسب في الأداء.

ولكن، ما لم تقم بإلغاء تسوية بنية قاعدة البيانات عن قصد، فإنني أنصحك باستخدام قيود FK.السبب الرئيسي - الاتساق.

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

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

ومع ذلك، قد تكون هناك فائدة غير مباشرة في الأداء.

بالنسبة لـ SQL Server على الأقل، يجب أن تحتوي الأعمدة الموجودة في FK على نفس نوع البيانات على كل جانب.بدون FK، يمكن أن يكون لديك والد nvarchar وطفل varchar على سبيل المثال.عند الانضمام إلى الجدولين، ستحصل على تحويلات نوع البيانات التي يمكن أن تؤدي إلى توقف الأداء.

مثال:أطوال varchar مختلفة تسبب مشكلة

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