تجنب التبعيات متعدية للمساعدة في ضمان التطبيع
التبعية متعدية في قاعدة بيانات هي علاقة غير مباشرة بين القيم في نفس الجدول الذي يسبب تبعية وظيفية . لتحقيق معيار التطبيع للنموذج Normal III (3NF) ، يجب إزالة أي تبعية متعدية.
وبحكم طبيعتها ، يتطلب التبعية متعدية ثلاثة أو أكثر من السمات (أو أعمدة قاعدة البيانات) التي لها تبعية وظيفية بينها ، وهذا يعني أن العمود A في الجدول يعتمد على العمود B خلال عمود وسيط C.
دعونا نرى كيف قد يعمل هذا.
مثال تبعية متعدية
المؤلفون
| Author_ID | مؤلف | كتاب | Author_Nationality |
|---|---|---|---|
| Auth_001 | أورسون سكوت كارد | لعبة اندر ل | الولايات المتحدة الامريكانية |
| Auth_001 | أورسون سكوت كارد | لعبة اندر ل | الولايات المتحدة الامريكانية |
| Auth_002 | مارجريت اتوود | حكاية خادمة | كندا |
في المثال AUTHORS أعلاه:
- كتاب → الكاتب : هنا ، تحدد السمة Book السمة Author . إذا كنت تعرف اسم الكتاب ، يمكنك معرفة اسم المؤلف. ومع ذلك ، لا يحدد المؤلف الكتاب ، لأن المؤلف يمكنه كتابة عدة كتب. على سبيل المثال ، لمجرد معرفة اسم المؤلف Orson Scott Card ، لا نزال لا نعرف اسم الكتاب.
- المؤلف → Author_Nationality : وبالمثل ، تحدد السمة Author 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 خلال سمة Author . لا يزال لدينا اعتمادية متعدية.
نحتاج إلى إضافة جدول ثالث لتطبيع هذه البيانات:
بلدان
| 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" دون حذف المؤلف تمامًا.
هذه ليست سوى بعض الأسباب التي تجعل التطبيع ، وتجنب التبعيات متعدية ، وحماية البيانات وضمان الاتساق.