ما هي أشكال قاعدة البيانات العادية وهل يمكنك إعطاء أمثلة؟ [مغلق

StackOverflow https://stackoverflow.com/questions/723998

سؤال

في تصميم قاعدة البيانات العلائقية، يوجد مفهوم لتطبيع قاعدة البيانات أو مجرد تطبيع، وهو عملية تنظيم الأعمدة (السمات) والجداول (العلاقات) للحد من تكرار البيانات وتحسين تكامل البيانات. (كما كتب على ويكيبيديا).

نظرا لأن معظم المقالات تقنية إلى حد ما، وبالتالي فهم أكثر صعوبة، أطلب من شخص ما أن يكتب أسهل لفهم التفسير بناء على أمثلة حول ما يعنيه 1NF و 2NF و 3NF وحتى 3.5NF (Boyce-Codd).

هل كانت مفيدة؟

المحلول

1NF هي أبسط النماذج العادية - يجب أن تحتوي كل خلية في جدول معلومات واحدة فقط من المعلومات، ولا يمكن أن يكون هناك صفوف مكررة.

2NF و 3NF كلها تعتمد على المفتاح الأساسي. أذكر أن المفتاح الأساسي يمكن أن تتكون من أعمدة متعددة. كما قال كريس في رده:

تعتمد البيانات على المفتاح [1NF]، والمفتاح بالكامل [2NF] وليس سوى المفتاح [3NF] (لذلك ساعدني كود).

2nf.

قل لديك جدول يحتوي على دورات تؤخذ في فصل دراسي معين، ولديك البيانات التالية:

|-----Primary Key----|               uh oh |
                                           V
CourseID | SemesterID | #Places  | Course Name  |
------------------------------------------------|
IT101    |   2009-1   | 100      | Programming  |
IT101    |   2009-2   | 100      | Programming  |
IT102    |   2009-1   | 200      | Databases    |
IT102    |   2010-1   | 150      | Databases    |
IT103    |   2009-2   | 120      | Web Design   |

هذا هو ليس في 2NF., ، لأن العمود الرابع لا يعتمد على بأكمله مفتاح - ولكن فقط جزء منه. يعتمد اسم الدورة التدريبية على معرف الدورة التدريبية، ولكن لا علاقة له في الفصول الدراسية التي اتخذت بها. وهكذا، كما ترون، لدينا معلومات مكررة - العديد من الصفوف تخبرنا أن IT101 هو البرمجة، و IT102 عبارة عن قواعد بيانات. لذلك نحن نصلح ذلك عن طريق تحريك اسم الدورة التدريبية إلى جدول آخر، حيث هو البرنامج الدراسي الأول هو المفتاح بأكمله.

Primary Key |

CourseID    |  Course Name |
---------------------------|
IT101       | Programming  |
IT102       | Databases    |
IT103       | Web Design   |

لا التكرار!

3NF.

حسنا، لذلك دعونا نقول أننا نضيف أيضا اسم المعلم بالدورة، وبعض التفاصيل عنها، في RDBMS:

|-----Primary Key----|                           uh oh |
                                                       V
Course  |  Semester  |  #Places   |  TeacherID  | TeacherName  |
---------------------------------------------------------------|
IT101   |   2009-1   |  100       |  332        |  Mr Jones    |
IT101   |   2009-2   |  100       |  332        |  Mr Jones    |
IT102   |   2009-1   |  200       |  495        |  Mr Bentley  |
IT102   |   2010-1   |  150       |  332        |  Mr Jones    |
IT103   |   2009-2   |  120       |  242        |  Mrs Smith   |

نأمل الآن أن يكون من الواضح أن اسم التلميذا يعتمد على المعلم - لذلك هذا هو ليس في 3NF.. وبعد لإصلاح هذا، نحن نفعل نفس الشيء كما فعلنا في 2NF - خذ حقل اسم التلميذا من هذا الجدول، ووضعه من تلقاء نفسه، والذي لديه مدربي مثل المفتاح.

 Primary Key |

 TeacherID   | TeacherName  |
 ---------------------------|
 332         |  Mr Jones    |
 495         |  Mr Bentley  |
 242         |  Mrs Smith   |

لا التكرار!

شيء مهم يجب تذكره هو أنه إذا لم يكن هناك شيء ما في 1NF، فليس في 2NF أو 3NF أيضا. لذلك كل نموذج عادي إضافي يتطلب كل شيء أن النماذج العادية أقل، بالإضافة إلى بعض الظروف الإضافية، والتي يجب أن الكل تتحقق.

نصائح أخرى

لم يكن لدي ذاكرة جيدة للصياغة الدقيقة، ولكن في فئة قاعدة البيانات الخاصة بي أعتقد أن الأستاذ يقول دائما شيئا مثل:

تعتمد البيانات على المفتاح [1NF]، والمفتاح بالكامل [2NF] وليس سوى المفتاح [3NF].

هنا سريع، من المسلم به butchered. استجابة، ولكن في جملة:

1NF: يتم تنظيم الجدول الخاص بك باعتباره غير مربوط تعيين البيانات، وليس هناك أعمدة متكررة.

2NF: لا تكرر البيانات في عمود واحد من طاولتك بسبب عمود آخر.

3NF: يتصل كل عمود في طاولتك فقط على مفتاح الجدول الخاص بك - فلن يكون لديك عمود في جدول يصف عمود آخر في الجدول الخاص بك وهو ليس المفتاح.

لمزيد من التفاصيل، انظر ويكيبيديا ...

1NF: قيمة واحدة فقط لكل عمود

2NF: يجب أن تعتمد كل الأعمدة الرئيسية غير الأساسية في الجدول على المفتاح الأساسي بأكمله.

3NF: يجب أن تعتمد جميع الأعمدة الرئيسية غير الأساسية في الجدول مباشرة على المفتاح الأساسي بأكمله.

لقد كتبت مقال بمزيد من التفصيل هنا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top