- لا يوجد اعتماد انتقالي: هذه القاعدة هي المفتاح. في جدول 3NF، يجب أن يعتمد أي عمود غير مفتاح أساسي فقط على المفتاح الأساسي، وليس بشكل غير مباشر من خلال عمود غير مفتاح آخر.
دعونا نلقي نظرة على ما يعني ذلك عمليًا.
تقسيم الجداول لتحقيق الصيغة الطبيعية الثالثة
لنتابع عملية تقسيم الجداول للوصول إلى الصيغة الطبيعية الثالثة. سنستخدم بيانات عينية من دورات DataCamp لتوضيح كل خطوة.
الخطوة 1: تحديد التبعيات الناقلة
للبدء، سنبحث عن أي سمات في جدول تعتمد بشكل غير مباشر على المفتاح الأساسي. كقاعدة عامة، إذا كانت أي سمة تعتمد على شيء غير المفتاح الأساسي، فهذا يشير إلى التبعية الناقلة. هذا إشارة إلى أنه ربما حان الوقت لتقسيم الجدول الخاص بك.
انظر إلى الجداول الثلاثة أدناه. أيها يحتوي على تبعية عابرة؟
الجدول 1: الدورة
Course ID | Course Name | Difficulty |
---|---|---|
201 | أساسيات SQL | مبتدئ |
202 | مقدمة لبايثون | مبتدئ |
203 | فهم علوم البيانات | متوسط |
الجدول 2: المدرب
Instructor ID | Instructor Name | Expertise |
---|---|---|
1 | سارة جونسون | علوم البيانات |
2 | توم ويليامز | تعلم الآلة |
3 | إميلي براون | بايثون |
الجدول 3: التسجيلات
Enrollment ID | Student Name | Course ID | Course Name |
---|---|---|---|
1001 | Alice Smith | 201 | SQL الأساسيات |
1002 | Bob Green | 202 | مقدمة إلى Python |
1003 | Charlie Blue | 201 | SQL الأساسيات |
الجواب هو… الجدول 3!
في هذه الجدول، اسم الدورة يعتمد على معرّف الدورة، ولكن ليس بشكل مباشر على معرّف التسجيل (المفتاح الأساسي). هذه التبعية غير المباشرة تجعل اسم الدورة تبعية انتقالية.
الخطوة 2: فصل البيانات إلى جداول جديدة
لمعالجة التبعية العابرة، سنقوم بتقسيم الجدول 1 إلى جدولين. سيتم التركيز في كل جدول على البيانات المعتمدة مباشرة.
جدول التسجيل المعدل
Enrollment ID | Student Name | Course ID |
---|---|---|
1001 | أليس سميث | 201 |
1002 | بوب جرين | 202 |
1003 | تشارلي بلو | 201 |
جدول الدورات
Course ID | Course Name |
---|---|
201 | أساسيات SQL |
202 | مقدمة للبايثون |
الآن، تحتوي كل جدول على معلومات تعتمد مباشرة على مفتاحه الرئيسي: معرف الدورة هو الآن المفتاح الرئيسي لـ اسم الدورة في جدول الدورات، و معرف التسجيل هو المفتاح الرئيسي في جدول التسجيلات.
بهذا التقسيم، تلبي الجداول الآن متطلبات 3NF، محدثة الزيادة وضمان أن كل جدول يخزن معلومات ذات صلة مباشرة فقط.
إذا كنت ترغب في البدء وإنشاء قواعد بيانات خاصة بك، فتحقق من دورتنا إنشاء قواعد بيانات PostgreSQL. إذا كنت تتقدم قليلاً، يمكنك أن تجرب مقدمة لنمذجة البيانات في Snowflake، التي تغطي أفكارًا مثل نمذجة الكيانات والعلاقات والأبعاد.
فوائد وقيود استخدام الشكل الطبيعي الثالث
إذن، لماذا تبذل كل هذه الجهود للوصول إلى 3NF؟ إليك أهم المزايا:
- تحسين سلامة البيانات: من خلال القضاء على التبعيات العابرة، يساعد الشكل الطبيعي الثالث على ضمان أن التحديثات والحذف لا تؤدي إلى بيانات متضاربة أو قديمة عبر الجداول.
- تقليل التكرار: الحد من التكرار يعني أن قاعدة البيانات الخاصة بك أسهل في الصيانة، ويتم تقليل استخدام التخزين.
- تبسيط صيانة البيانات: الاحتفاظ بالمعلومات المماثلة في الجداول المخصصة يجعل من السهل تحديث السجلات دون الحاجة إلى تتبع الإدخالات المتكررة.
مع ذلك، بينما تدعم هياكل 3NF دقة البيانات، يمكن أن تؤدي أيضًا إلى بيانات أكثر تجزئة، مما يجعل الاستعلامات المعقدة أبطأ في بعض الأحيان بسبب الانضمامات الإضافية للجداول. في الحالات التي تتفوق فيها الحاجة إلى السرعة على الحاجة إلى التطبيع، قد تكون BCNF أو 4NF خيارات أكثر عملية.
المقارنة: الأشكال العادية الأولى والثانية والثالثة و BC Normal Forms
لنلقِ نظرة على الفروقات بين الأشكال.
جدول المقارنة: الأشكال العادية الأولى والثانية والثالثة
إليك جدول مقارنة لمساعدتك في فهم متطلبات 1NF و 2NF و 3NF.
BCNF هو شكل “أكثر صرامة” من 3NF الذي يقضي بشكل أكبر على الشذوذات التي تظهر مع تداخل المفاتيح المرشحة. يمكن أن يكون مفيدًا بشكل خاص في الحالات المعقدة حيث لا يقضي 3NF بمفرده على الاعتماديات بشكل كامل. ينطبق BCNF عندما يعتمد سمة غير أساسية على سمة هي جزء من مفتاح مرشح مركب. أعلم أن هذا يبدو معقدًا، لذا دعونا نفصل الأمر بمثال.
الهيكل الحالي (في 3NF)
بعد التحليل لتحقيق 3NF، كان لدينا هذين الجدولين:
جدول التسجيلات
جدول الدورات
Course ID | Course Name |
---|---|
201 | أساسيات SQL |
202 | مقدمة إلى بايثون |
في هذا الهيكل، كل جدول في 3NF بدون تبعيات انتقالية، والبيانات تم تطبيعها بشكل مناسب.
تقديم متطلب جديد
الآن، دعنا نضيف سمة جديدة إلى الدورات: الفصل الدراسي الذي تُعقد فيه كل دورة. هذه السمة الجديدة قد تؤدي إلى سيناريو يتطلب BCNF.
الجدول المحدث للدورات (3NF)
Course ID | Course Name | Classroom |
---|---|---|
201 | أساسيات SQL | الغرفة 101 |
202 | مقدمة للبايثون | الغرفة 102 |
203 | فهم علم البيانات | الغرفة 101 |
هنا، معرف الدورة هو لا يزال المفتاح الأساسي، وجميع السمات الأخرى تعتمد مباشرة عليه. ولكن دعونا نفترض وجود قاعدة جديدة تنص على أن كل فصل يمكنه استيعاب مادة واحدة في وقت واحد. دعونا نفترض أيضًا أن اسم الدورة “SQL Fundamentals” يمكن أن يُقدم تحت مُعرفات دورة مختلفة (مثل 201، 204، إلخ)، إذا تم جدولتها في أوقات مختلفة. في هذه الحالة، سيتم إقامة كل عرض لـ “SQL Fundamentals” في “الغرفة 101″، بغض النظر عن معرف الدورة الخاص بها. ونتيجة لذلك، يُحدد اسم الدورة بشكل فريد أيضًا الفصل.
هذا يعني أن لدينا الآن مفاتيح مرشحة اثنتان:
- معرف الدورة
- اسم الدورة
بعد الحصول على مفاتيح المرشحين الاثنين، نواجه الآن مشكلة لا يعالجها الشكل العام الثالث: الفصل الدراسييعتمد على اسم الدورة بدلاً من فقط معرف الدورة.
تطبيق BCNF
للتخلص من مشكلة التبعية هذه، سيتعين علينا تقسيم جدول الدورات إلى جدولين منفصلين يتناسبان أكثر مع BCNF:
- جدول جديد الدورات, الذي يتضمن فقط معرف الدورة و اسم الدورة.
- جدولتفاصيل الدورة، الذي يخزناسم الدورة والفصل الدراسي المرتبط.
هكذا يبدو ذلك:
جدول الدورات المنقح (BCNF)
جدول تفاصيل الدورة (BCNF)
Course Name | Classroom |
---|---|
أساسيات SQL | الغرفة 101 |
مقدمة في بايثون | الغرفة 102 |
فهم علم البيانات | الغرفة 101 |
- في جدول الدورات، معرّف الدورة هو المفتاح الأساسي، وتعتمد جميع السمات فقط عليه.
- في الCourseDetails جدول اسم الدورة هو المفتاح الأساسي، و الصف يعتمد فقط على اسم الدورة.
تعمل هذه الإعدادات على إزالة أي مشاكل تعتمد على المفاتيح المرشحة المتداخلة، مما يضمن هيكلًا مُنظمًا بشكل صارم.
الخاتمة
يعتبر الشكل الطبيعي الثالث أداة قيمة لمصممي قواعد البيانات الذين يهدفون إلى الحفاظ على البيانات نظيفة ومتسقة وخالية من الاعتماديات الإشكالية. مع 3NF، يتم تعزيز سلامة البيانات، مما يجعل الإدارة أكثر سلاسة ويقلل من الازدواجية. تذكر، بينما يعمل 3NF بشكل جيد في معظم الحالات، قد تستفيد قواعد البيانات الأكثر تعقيدًا من أشكال إضافية مثل BCNF أو 4NF.
إذا وجدت هذه المقالة مفيدة، فكر في اتخاذ الخطوة التالية من خلال الحصول على شهادة مساعد SQL. إنها طريقة رائعة للتحقق من مهاراتك في SQL وإدارة قواعد البيانات وإظهار خبرتك لأرباب العمل المحتملين!