التطبيع في SQL: 1NF، 2NF، 3NF & BCNF
نشرت: 2021-03-12التطبيع هو عملية منهجية للتأكد من أن نموذج قاعدة البيانات العلائقية فعال ومناسب للاستعلام للأغراض العامة وخالي من الخصائص غير المرغوب فيها مثل الإدراج والتحديث والحذف الشذوذ ، مما يؤدي إلى فقدان سلامة البيانات. تساعد عملية التطبيع هذه أيضًا على التخلص من تكرار البيانات وتقليل فرص عدم الاتساق بعد أي عمليات إدراج أو تحديث أو حذف.
لفهم أفضل ، ضع في اعتبارك المخطط التالي: الطالب (الاسم ، العنوان ، الموضوع ، الدرجة)
هناك بعض المشاكل أو عدم الكفاءة في هذا المخطط.
1) التكرار : يتكرر عنوان الطالب لكل مادة يسجل فيها.
2) تحديث الشذوذ : ربما قمنا بتحديث العنوان في مجموعة (صف) واحدة مع تركه دون تغيير في الصفوف الأخرى. وبالتالي لن يكون لدينا عنوان فريد باستمرار لكل طالب.
3) الإدخال الشاذ : لن نسجل عنوان الطالب دون التسجيل في موضوع واحد على الأقل. وبالمثل ، عندما يريد الطالب التسجيل في موضوع جديد ، فمن الممكن أن يتم إدراج عنوان مختلف.
4) شذوذ الحذف : إذا قرر الطالب إيقاف جميع المواد المسجلة ، فسيتم أيضًا فقدان عنوان الطالب أثناء عملية الحذف.
وبالتالي ، من المهم تمثيل بيانات المستخدم من خلال العلاقات التي لا تخلق حالات شاذة بعد عمليات إضافة أو حذف أو تحديث الصفوف. لا يمكن تحقيق ذلك إلا من خلال تحليل دقيق لقيود التكامل ، وخاصة تبعيات بيانات قاعدة البيانات.
يجب تصميم العلاقات بحيث يتم تجميع السمات الموجودة معًا بشكل طبيعي فقط. يمكن القيام بذلك في الغالب من خلال فهم أساسي لمعنى جميع سمات البيانات. ومع ذلك ، ما زلنا بحاجة إلى بعض الإجراءات الرسمية لضمان هدف التصميم الخاص بنا.
التطبيع هو ذلك الإجراء الرسمي. يجيب على سؤال لماذا ستكون مجموعة معينة من السمات أفضل من أي مجموعة أخرى.
توجد سبعة أشكال عادية اعتبارًا من اليوم:
- أول نموذج عادي (1NF)
- النموذج العادي الثاني (2NF)
- النموذج العادي الثالث (3NF)
- نموذج Boyce-Codd العادي (BCNF)
- النموذج العادي الرابع (4NF)
- النموذج العادي الخامس (5NF)
- النموذج العادي السادس أو مفتاح المجال العادي (6NF)
قراءة: أنواع طرق العرض في SQL
جدول المحتويات
أول نموذج عادي (1NF أو نموذج أدنى)
- لا يوجد ترتيب من أعلى إلى أسفل للصفوف وترتيب من اليسار إلى اليمين للأعمدة.
- لا توجد صفوف مكررة.
- يحتوي كل تقاطع صف وعمود على قيمة واحدة بالضبط من المجال القابل للتطبيق أو قيمة خالية. يشير هذا الشرط إلى أن جميع قيم الأعمدة يجب أن تكون ذرية أو عددية أو تحتوي على قيمة واحدة فقط. لا يُسمح هنا بتكرار المعلومات أو القيم في عدة أعمدة.
- جميع الأعمدة عادية (على سبيل المثال ، الصفوف لا تحتوي على مكونات مخفية مثل معرفات الصف أو معرفات الكائنات أو الطوابع الزمنية المخفية).
لنأخذ مثالاً على مخطط لم يتم تطبيعه. افترض أن المصمم يرغب في تسجيل أسماء وأرقام هواتف العملاء. يحددون جدول العملاء كما هو موضح:
معرف العميل | الاسم الاول | اسم العائلة | أرقام الهاتف |
123 | بيمال | ساها | 555-861-2025 |
456 | كابيل | خانا | 555-403-1659، 555-776-4100 |
789 | كابيتا | روي | 555-808-9633 |
هنا ، ليس في 1 NF. عمود أرقام الهاتف ليس ذريًا أو لا يحتوي على قيمة عددية ، أي أنه يحتوي على أكثر من قيمة واحدة ، والتي لا يمكن السماح بها في 1 NF.
لجعله 1 NF
- سنقوم أولاً بتقسيم (تفكيك) جدولنا الفردي إلى قسمين.
- يجب أن يحتوي كل جدول على معلومات حول كيان واحد فقط.
معرف العميل | الاسم الاول | اسم العائلة |
123 | بيمال | ساها |
456 | كابيل | خانا |
789 | كابيتا | روي |
معرف العميل | أرقام الهاتف |
123 | 555-861-2025 |
456 | 555-403-1659 |
456 | 555-776-4100 |
789 | 555-808-9633 |
لا تحدث مجموعات متكررة من أرقام الهواتف في هذا التصميم. بدلاً من ذلك ، يظهر كل ارتباط لرقم هاتف عميل في سجله الخاص.
الخروج: أسئلة وأجوبة مقابلة SQL الأكثر شيوعًا
النموذج العادي الثاني
كل نموذج عادي له معايير أكثر تقييدًا من سابقتها. لذا فإن أي جدول في الشكل العادي الثاني (2NF) أو أعلى هو ، بحكم التعريف ، أيضًا في 1NF. من ناحية أخرى ، قد يكون الجدول الموجود في 1NF أو لا يكون في 2NF ؛ إذا كان في 2NF ، فقد يكون أو لا يكون في 3NF ، وهكذا.
يُقال أن جدول 1NF موجود في 2NF إذا وفقط إذا لم تكن أي من سماته غير الممتازة تعتمد وظيفيًا على جزء (مجموعة فرعية مناسبة) من مفتاح مرشح. (لا تنتمي السمة nonprime إلى أي مفتاح مرشح.)
لاحظ أنه عندما لا يحتوي الجدول 1NF على مفاتيح ترشيح مركبة (تتكون المفاتيح المرشحة من أكثر من سمة واحدة) ، يكون الجدول تلقائيًا في 2NF.
تحقق مما إذا كانت العلاقة R (A ، B ، C ، D ، E) مع FD تم تعيينها كـ {BC؟ D ، AC؟ BE ، B؟ E} موجود في 2NF؟
- كما نرى ، إغلاق AC هو (AC) + = {A، C، B، E، D} من خلال تطبيق خوارزمية العضوية. لكن لا يمكن لأي من مجموعاتها الفرعية تحديد كل سمات العلاقة من تلقاء نفسها ، لذا فإن AC هي المفتاح المرشح لهذه العلاقة. علاوة على ذلك ، لا يمكن اشتقاق أي من A أو C من أي سمة أخرى للعلاقة ، لذلك سيكون هناك مفتاح مرشح واحد فقط وهو {AC}.
- هنا {A، C} هي السمات الأولية و {B، D، E} هي سمات nonprime.
- العلاقة R موجودة بالفعل في الشكل العادي الأول لأن نظام DBMS العلائقي في 1NF لا يسمح بسمة متعددة القيم أو مركبة.
قبل الميلاد؟ D في الشكل العادي الثاني لأن BC ليست مجموعة فرعية مناسبة من المفتاح المرشح AC ،
AC؟ يكون BE في الشكل العادي الثاني حيث أن AC نفسها هي المفتاح المرشح ، و
ب ؟ E في الشكل العادي الثاني B ليست مجموعة فرعية مناسبة من المفتاح AC المرشح.
وبالتالي فإن العلاقة المعطاة R تكون في الشكل العادي الثاني.
النموذج العادي الثالث
يُقال أن الجدول موجود في 3NF إذا وفقط إذا كان لكل من تبعياته الوظيفية.
X → A ، ينطبق واحد على الأقل من الشروط التالية:
- X يحتوي على A (أي ، X → A هي تبعية وظيفية تافهة) ، أو
- X هو مفتاح السوبر ، أو
- A هي سمة أساسية (على سبيل المثال ، A موجود داخل مفتاح مرشح)
يشير تعريف آخر لـ 3NF إلى أن كل سمة غير رئيسية لـ R لا تعتمد بشكل انتقالي (أي تعتمد بشكل مباشر) على المفتاح الأساسي لـ R. وهذا يعني أنه لا توجد سمة nonprime (وليست جزءًا من مفتاح مرشح) تعتمد وظيفيًا على سمات أخرى nonprime. إذا كان هناك نوعان من التبعيات مثل أن أ؟ B و BC ، إذن من FDs هذه ، يمكننا اشتقاق A؟ C. هذا الاعتماد AC متعدية.
مثال على 3NF:
ضع في اعتبارك أمر العلاقة التالي (رقم الطلب ، الجزء ، المورد ، سعر الوحدة ، الكمية المطلوبة) مع مجموعة FDs المحددة:
ترتيب# ؟ الجزء ، المورد ، الكمية المطلوبة والمورد ، الجزء؟ سعر الوحده)
هنا الأمر رقم # هو مفتاح العلاقة.
باستخدام بديهيات أمسترونج ، حصلنا عليها
ترتيب# ؟ جزء ، أمر؟ المورد والنظام؟ الكمية المطلوبة.
ترتيب# ؟ الجزء ، المورد والمورد ، الجزء؟ سعر الوحدة ، كلاهما يعطي الطلب رقم؟ سعر الوحده.
وبالتالي ، نرى أن جميع السمات غير الممتازة تعتمد على المفتاح (رقم الطلب). ومع ذلك ، توجد تبعية متعدية بين رقم الطلب وسعر الوحدة. إذن هذه العلاقة ليست في 3NF. كيف نصنعه في 3NF؟
لا يمكننا تخزين سعر الوحدة لأي قطعة يقدمها أي مورد ما لم يقدم شخص ما طلبًا لهذا الجزء. لذلك سيتعين علينا تحليل الجدول لجعله يتبع 3NF على النحو التالي.
الطلب (رقم الطلب ، الجزء ، المورد ، الكمية المطلوبة) وسعر السعر (الجزء ، المورد ، سعر الوحدة).
الآن لا توجد تبعيات متعدية موجودة. العلاقة في 3NF.
اقرأ أيضًا: SQL for Data Science
تعلم دورات البرمجيات عبر الإنترنت من أفضل الجامعات في العالم. اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.
خاتمة
هناك المزيد للتطبيع ، مثل BCNF و 4NF و 5NF و 6NF. باختصار ، BCNF ليست سوى امتداد لـ 3NF ، حيث أن القاعدة الأخيرة لـ 3NF لا تنطبق هنا. يجب أن تحتوي جميع التبعيات الوظيفية على السمات الرئيسية على اليسار ولا شيء على الجانب الأيمن. (يسمى BCNF أيضًا 3.5NF). ومع ذلك ، نادراً ما يتم تنفيذ الأشكال العادية من 4NF وما بعده في الممارسة العادية.
إذا كنت مهتمًا بمعرفة المزيد حول التطوير الكامل ، فراجع برنامج upGrad & IIIT-B's Executive PG في تطوير برامج مكدس كامل ، والذي تم تصميمه للمهنيين العاملين ويقدم أكثر من 500 ساعة من التدريب الصارم ، وأكثر من 9 مشاريع ، والمهام ، وحالة خريجي IIIT-B ، ومشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.
ما هو تطبيع قاعدة البيانات؟
ما هي الأنواع المختلفة من الأشكال العادية؟
تم تطوير الأشكال العادية بواسطة Edgar F. Codd ، والد قواعد البيانات العلائقية. كل نموذج عادي هو مستوى من الصحة المنطقية الشاملة للنموذج العلائقي ويخدم غرضًا في التصميم الفعلي لقواعد البيانات. أول نموذج عادي ، 1NF ، يدور حول تصميم الجدول ، ويتضمن إزالة التكرارات والتأكد من أن كل جزء من البيانات يتم تمثيله مرة واحدة فقط في الجدول. النموذج العادي الثاني يدور حول الأعمدة القابلة للتكرار - تقسيمها إلى جداول متعددة. النموذج العادي الثالث يدور حول تكرار المجموعات - تقسيمهم إلى جداول متعددة. الشكل الرابع العادي هو حوالي 1NF و 2NF و 3NF - مما يضمن خلو الجداول من أي منطقي أو عدم تطبيع.
كيفية تطبيع قاعدة البيانات؟
تطبيع قاعدة البيانات هي عملية تقسيمها إلى أصغر عدد من الجداول. في النهاية ، لن تحتوي قاعدة البيانات على حقول مكررة ولن تحتوي على صفوف بمعلومات جزئية. والغرض من ذلك هو التأكد من أن جميع البيانات مرتبطة بجميع البيانات الأخرى ذات الصلة ، وعند حدوث تغيير في سجل واحد ، يتم أيضًا تغيير جميع السجلات الأخرى التي قد تكون مرتبطة به.