Skip to main content

التبعية متعدية في قاعدة البيانات

لاعلم بلاعمل ولا عمل بلا علم - د. عبدالإله العرفج (قد 2025)

لاعلم بلاعمل ولا عمل بلا علم - د. عبدالإله العرفج (قد 2025)
Anonim

التبعية متعدية في قاعدة بيانات هي علاقة غير مباشرة بين القيم في نفس الجدول الذي يسبب تبعية وظيفية. لتحقيق معيار التطبيع للنموذج Normal III (3NF) ، يجب إزالة أي تبعية متعدية.

وبحكم طبيعتها ، يتطلب التبعية متعدية ثلاثة أو أكثر من السمات (أو أعمدة قاعدة البيانات) التي لها تبعية وظيفية بينها ، وهذا يعني أن العمود A في الجدول يعتمد على العمود B خلال عمود وسيط C.

دعونا نرى كيف قد يعمل هذا.

مثال تبعية متعدية

المؤلفون

Author_IDمؤلفكتابAuthor_Nationality
Auth_001أورسون سكوت كاردلعبة اندر لالولايات المتحدة الامريكانية
Auth_001أورسون سكوت كاردلعبة اندر لالولايات المتحدة الامريكانية
Auth_002مارجريت اتوودحكاية خادمةكندا

في المثال AUTHORS أعلاه:

  • كتاب → مؤلف : هنا ، كتاب تحدد السمة مؤلف صفة، عزا. إذا كنت تعرف اسم الكتاب ، يمكنك معرفة اسم المؤلف. ومع ذلك، مؤلف لا يحدد كتاب لأن المؤلف يمكنه كتابة عدة كتب. على سبيل المثال ، لمجرد معرفة اسم المؤلف Orson Scott Card ، لا نزال لا نعرف اسم الكتاب.
  • مؤلف → Author_Nationality : وبالمثل ، فإن مؤلف تحدد السمة Author_Nationality ، ولكن ليس العكس؛ فقط لأننا نعرف أن الجنسية لا تعني أنه يمكننا تحديد المؤلف.

لكن هذا الجدول يقدم تبعية متعدية:

  • كتاب → Author_Nationality: إذا كنا نعرف اسم الكتاب ، فيمكننا تحديد الجنسية عبر عمود المؤلف.

تجنب التبعيات متعدية

لضمان النموذج العادي الثالث ، دعنا نزيل التبعية متعدية.

يمكننا البدء عن طريق إزالة عمود الكتاب من جدول الكتاب وإنشاء جدول كتب منفصل:

BOOKS

Book_IDكتابAuthor_ID
Book_001لعبة اندر لAuth_001
Book_001أطفال العقلAuth_001
Book_002حكاية خادمةAuth_002

المؤلفون

Author_IDمؤلفAuthor_Nationality
Auth_001أورسون سكوت كاردالولايات المتحدة الامريكانية
Auth_002مارجريت اتوودكندا

هل هذا حلها؟ لنفحص اعتمادياتنا الآن:

كتب الجدول:

  • Book_ID → كتاب: ال كتاب يعتمد على Book_ID .
  • لا توجد تبعية أخرى في هذا الجدول ، لذلك نحن بخير. لاحظ أن المفتاح الخارجي Author_ID يربط هذا الجدول بجدول AUTHORS من خلال مفتاحه الأساسي Author_ID . لقد أنشأنا علاقة لتجنب التبعية متعدية ، وهو تصميم رئيسي لقواعد البيانات العلائقية.

جدول AUTHORS:

  • Author_ID → مؤلف: ال مؤلف يعتمد على Author_ID .
  • مؤلف → Author_Nationality: يمكن تحديد الجنسية من قبل المؤلف.
  • Author_ID → Author_Nationality: الجنسية يمكن تحديدها من Author_ID عبر ال مؤلف صفة، عزا. لا يزال لدينا اعتمادية متعدية.

نحتاج إلى إضافة جدول ثالث لتطبيع هذه البيانات:

بلدان

Country_IDبلد
Coun_001الولايات المتحدة الامريكانية
Coun_002كندا

المؤلفون

Author_IDمؤلفCountry_ID
Auth_001أورسون سكوت كاردCoun_001
Auth_002مارجريت اتوودCoun_002

الآن لدينا ثلاثة جداول ، مع استخدام مفاتيح خارجية للربط بين الجداول:

  • المفتاح الخارجي لجدول BOOK Author_ID يربط كتابًا بمؤلف في جدول AUTHORS.
  • المفتاح الخارجي لجدول AUTHORS Country_ID يربط المؤلف ببلد في جدول COUNTRIES.
  • لا يحتوي جدول COUNTRIES على أي مفتاح خارجي لأنه لا يحتاج إلى الارتباط بجدول آخر في هذا التصميم.

لماذا التبعيات متعدية هي تصميم قاعدة بيانات سيئة

ما هي قيمة تجنب التبعيات متعدية للمساعدة في ضمان 3NF؟ دعنا نفكر في الجدول الأول مرة أخرى ونرى المشكلات التي ينشئها:

المؤلفون

Author_IDمؤلفكتابAuthor_Nationality
Auth_001أورسون سكوت كاردلعبة اندر لالولايات المتحدة الامريكانية
Auth_001أورسون سكوت كاردأطفال العقلالولايات المتحدة الامريكانية
Auth_002مارجريت اتوودحكاية خادمةكندا

يمكن أن يساهم هذا النوع من التصميم في تشوهات البيانات وعدم التناسق ، على سبيل المثال:

  • إذا حذفت كتابين "أطفال العقل" و "لعبة أندر" ، فستحذف مؤلف "أورسون سكوت كارد" وجنسيته من قاعدة البيانات بالكامل.
  • لا يمكنك إضافة مؤلف جديد إلى قاعدة البيانات إلا إذا قمت بإضافة كتاب أيضاً. ماذا لو أن المؤلف لم يتم نشره بعد أو أنك لا تعرف اسم الكتاب الذي قام بتأليفه؟
  • إذا غيرت "Orson Scott Card" جنسيته ، فسيتعين عليك تغييرها في جميع السجلات التي يظهر فيها. يمكن أن يؤدي وجود سجلات متعددة مع نفس المؤلف إلى بيانات غير دقيقة: ماذا لو لم يدرك شخص إدخال البيانات وجود سجلات متعددة له وتغيير البيانات في سجل واحد فقط؟
  • لا يمكنك حذف كتاب مثل "The Handmaid's Tale" دون حذف المؤلف تمامًا.

هذه ليست سوى بعض الأسباب التي تجعل التطبيع ، وتجنب التبعيات متعدية ، وحماية البيانات وضمان الاتساق.