وضع قاعدة بيانات في النموذج العادي الثالث (3NF)

الشكل الثالث (3NF) هو مبدأ قاعدة البيانات التي تدعم سلامة البيانات عن طريق بناء مبادئ تطبيع قاعدة البيانات المقدمة من النموذج الأول العادي (1NF) والنموذج الطبيعي الثاني (2NF).

المتطلبات النموذجية الثالثة

هناك نوعان من المتطلبات الأساسية لقاعدة البيانات لتكون في الشكل العادي الثالث:

حول اعتماد المفتاح الأساسي

دعونا نستكشف ما نعنيه بحقيقة أن جميع الأعمدة يجب أن تعتمد على المفتاح الأساسي.

إذا كان من الممكن اشتقاق قيمة العمود من كلٍّ من المفتاح الأساسي وعمود آخر في الجدول ، فإنه ينتهك 3NF. خذ بعين الاعتبار جدول Employees Employees مع هذه الأعمدة:

هل يعتمد الاسمان LastName و FirstName على قيمة EmployeeID فقط؟ حسنًا ، هل يمكن أن يعتمد اسم العائلة على الاسم الأول؟ لا ، لأن أي شيء متأصل في LastName قد يقترح قيمة FirstName. يمكن أن تعتمد FirstName على LastName؟ لا مرة أخرى ، لأن نفس الشيء صحيح: أيًا ما يكون اسم العائلة ، فقد لا يوفر تلميحًا إلى قيمة FirstName. لذلك ، هذا الجدول متوافق مع 3NF.

لكن ضع في اعتبارك جدول المركبات:

يمكن أن تستمد الشركة المصنعة والطراز من معرف السيارة - ولكن يمكن أن يستمد النموذج أيضًا من الشركة المصنّعة نظرًا لأن طراز السيارة يتم فقط من قِبل جهة تصنيع معينة. تصميم الجدول هذا غير متوافق مع 3NF ، وبالتالي ، يمكن أن يؤدي إلى تشوهات في البيانات. على سبيل المثال ، قد تقوم بتحديث الشركة المصنعة دون تحديث النموذج ، بإدخال عدم الدقة.

لجعله متوافقًا ، سنحتاج إلى نقل العمود الإضافي الإضافي إلى جدول آخر والإشارة إليه باستخدام مفتاح خارجي. سيؤدي ذلك إلى جدولين:

جدول المركبات

في الجدول أدناه ، يعد ModelID مفتاحًا خارجيًا لجدول الطرازات :

جدول النماذج

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

الحقول المشتقة في نموذج 3NF

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

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

في الواقع ، لأنه مشتق ، فمن الأفضل عدم تخزينها في قاعدة البيانات على الإطلاق.

يمكننا ببساطة حساب "على الطاير" عند تنفيذ استعلامات قاعدة البيانات. على سبيل المثال ، ربما سبق لنا استخدام هذا الاستعلام لاسترداد أرقام الطلبات والإجماليات:

حدد OrderNumber ، الإجمالي من WidgetOrders

يمكننا الآن استخدام الاستعلام التالي:

SELECT OrderNumber، UnitPrice * Quantity AS Total من WidgetOrders

لتحقيق نفس النتائج دون انتهاك قواعد التطبيع.