1NF, 2NF, 3NF Normalization in DATABASE
الكاتب: Mr.Aziz
تاريخ النشر: 2021-07-26 17:36:46
مساااءكم الخير للجميع..
اليوم راح اشرح عن موضوع مهم عن Normalization و في خطوات لازم تتبعها عشان تتأكد ان يكون الجدول تبع قاعده بيانات خالية من الأخطاء. وايضآ يكون مرتب وجميل وسهل التعامل معاه بالمستقبل.
و راح اشرح عنها بطريقة مبسطة و اوصل المعلومة لكم بحيث تفهمون كيف آلية العمل او طريقة العمل هذا النوع الاستراتيجية في الجداول قاعده بيانات.
- Normalization: تخطيط او استراتيجية لترتيب البيانات في جدول قاعده بيانات لتجنب من الاخطأ مثل التكرار البيانات اثناء العمل عمل Insert او update او Deletion. طبعآ راح يكون بثلاث خطوات نتبعها عشان نتجنب من هذي الاخطأ هي 1NF, 2NF and 3NF.
هذا مثال الجدول الطلاب بدون Normalization:
عندنا في الجدول و يوجد 4 بيانات عن الطلاب تمام.
وعندنا Branch الى هو قسم كمبيوتر ساينس و headofDepartment الى هو رئيس القسم كمبيوتر ساينس وايضآ office_phone رقم المكتب.
و نلاحظ هذي معلومات branch, office_phone and headofDepartment صارت مكرره مع كل اسم طالب بالجدول هذا يسمى التكرار Data Redundancy.
طيب ياعبدالعزيز ايش سالفه insert, update, delete؟
الحين راح اشرح لكم مع الامثلة بحيث تضح الصوره لانه هذي تعتبر اخطأ عند وجود تكرار البيانات بالجدول مثل ماتلاحظون فوق.
- Insertion Anomaly : لما نجي نضيف أسم طالب جديد نحتاج ايضآ نضيف أسم branch مع رئيس القسم وايضآ رقم الهاتف في كل صف وألا سوف يصبح NULL في بعض المعلومات branch او كلها.
وتخيل معاي يوجد 50 طالب جديد سوف ينضم و تحتاج تكرر هذي العملية 50 مرره.
هنا الامثلة:
تلاحظون المربع باللون الاحمر؟
هنا نحتاج نكرر المعلومة اكثر من مره عند اضافة طالب جديد
بدلآ مايكون فقط Branch سوف نضع اسم رئيس وايضآ الهاتف وألا سوف يصبح NULL
هكذا:
تلاحظون لما عملت insert للطالب رقم 5 ولكن لم اضع باقي معلومات branch و الاسف اصبحت NULL
ويجب عليك ان تعبيها بدل ان تركها فارغه.
مثل هكذا:.
مثل ماتلاحظ عبينا insert المعلومات في صف الطالب رقم 5 و ايضآ الباقيه والاسف تحتاج تعمل هذي طريقة 50 مره في حال اردنا نضيف 50 طالب :(.
هنا يسمى Insertion anomalies.
- Update Anomaly: لما تجي تحدث البيانات لشئ معين تحتاج تعدل الباقيه ايضآ!
كيف؟
انا راح أعطيكم مثال: لو رئيس القسم اسمه MR.A طلع من القسم الاسباب معينة و راح يجي شخص ثاني بداله اسمه MR.K هنا راح نعدل كل Row فيه MR.A و نحط فيه MR.K طبعآ بياخذ وقت و احيانا تصير في اخطأ.
هنا مثال انا راح اعدل الاسم في اول صف Row ونشوف نتيجة هل يتغير الباقين ولالا:
مثل ماتلاحظون تم أستخدام Update
وابي احدث أول صف الى رقم طالب 1 و رئيس قسم حقه بيكون MR.K
وبعد تحديث البيانات اصبح فقط صف الاول تحدثت ولكن الباقين لم يتغير ولم يحدث اي شي!!
ويجب عليك ان تحدثها كلها كما فعلت بالصف الاول مثل كذا:
تلاحظون صار يتغير بعد ماأضع رقم الصف او طالب في تحديث
ولكن تخيل معاي عندك 50 طالب و ليس لديك وقت اصلآ عشان تحدثهم كلهم
هذا اسمه Update anomaly.
- Deletion Anomaly: المشكلة من الحذف البيانات لما تبي تحذف بيانات الطلاب لسبب ما. مثلآ ترم جديد و لم يعد الطلاب موجودين و تحذفهم راح ينحذف اسم القسم و رئيس القسم وكل شي معلومات عن القسم :). يعني راح تخسر معلومات القسم مع معلومات الطلاب.
بمعنى من كلامي. Branch لايوجد له جدول خاص في مكان اخر والاسف راح يكون على نفس الجدول يعني لو حذفت بيانات طلاب. بيانات Branch راح تنحذف أيضآ.
هنا مثال وخلينا نحذف أول صف ونجرب:
نلاحظ هنا لما حذفنا الصف الاول الى اسم طالب Aziz تم حذف معلومات القسم ايضآ!
هذي مشكلة ولانريد نفقد بيانات القسم ابدآ مع معلومات الرئيس و الهاتف وغيره.
لانه لو حذفنا بيانات الطلاب كلها راح يصبح الجدول فاضي لايوجد شي.
هنا مثال:
نلاحظ هنا بعد حذف بيانات الطلاب تم حذف بيانات القسم ايضآ؟
وأكيد هذا شي خطأ ولانريد نحذف بيانات القسم نهائيآ.
هذي مشكلة تسمى Deletion Anomaly.
الحين راح نحل هذي المشكلة عن طريق ثلاث خطوات الى هي 1NF, 2NF and 3NF و نخلي الجدول جميل وخالي من الاخطأ من خلال Normalization:
- First Normal Form (1NF):
هنا يجب ان نفصل الجدول الى جدولين هو طلاب و جدول القسم ولكن هنا القانون تبع 1NF
- يجب ان يكون كل جدول له مفتاح رئيسي.
- يجب ان لايكون هناك تكرار بالقيمة اقصد Multi-value يعني بنفس entity يكون في قيمتين
هنا مثال بسيط
اسم الطالب | أسم الكورس |
Aziz | programing Math |
هذا خطأ لانه اسم الكورس يوجد قيمتين على اسم طالب ولازم كل طالب يكون له قيمة وحده ومميزة
يكون هكذا:
أسم طالب | أسم الكورس |
Aziz | Math |
النسبه الجدول سوف اقسمها الى جدولين وتصبح هكذا:
هنا تم حل المشكلة عن طريق فصل الجدولين يعني كل قسم واحد يكون فيه اكثر من طالب
يعني وضعنا مفتاح رئيسي تبع Branch الى جدول الطلاب كا مفتاح الفرعي
الان لايوجد اي تكرار ولكن في جدول الطلاب يوجد تكرار بأسم القسم هذا شي طبيعي وليس خطأ لانه كل قسم به اكثر من طالب.
- Second Normal Form (2NF):
- بعد النجاح من أول خطوه الى هي 1NF
- ننتقل الى ثاني خطوه 2NF وهنا أمره بسيط جدآ الى هو يجب ان نتأكد الجدول خالي من Partial Dependency.
ولكن ماهو Partial Dependency؟
بالاختصار هو البيانات تعتمد على المفتاح الرئيسي
هنا التوضيح.
مثل ماتشوفون سهم الاحمر على StuID مؤشر على names
يعني لو اجي استعدي ID رقم واحد راح يجيب لي اسم الطالب هو Aziz
هذا معناه يعتمد على يعني معلومات طالب يعتمد على مفتاح الرئيسي.
- Third Normal Form (3NF):
- بعد انتهاء من ثاني خطوه 2NF و تم عمله بنجاح
- الان نتقل الى اخر خطوه 3NF
هنا نتأكد من الجدول يكون خالي من Transitive Dependency ويجب ان لايوجد هذا الشئ
ماهو Transitive Dependency؟
ببساطة تكون بيانات من مفتاح الفرعي يعتمد على مفتاح الرئيسي.
بعطيكم مثال لتوضح الصوره:
وفون السهم الازرق على Branch له معلومات مثل اسم رئيس و رقم الهاتف
وكل قسم يكون فيه اكثر من طالب يعني لازم طالب ينكتب بمعلوماته على انه بالقسم CS و بحيث نعرف تحت معلومات CS هو اسم رئيس ورقم الهاتف وغيره :).
ألان تم حل مشاكل Normalization و الجدول اصبح نظيف وخالي من الاخطأ.
خلونا نجرب على السريع بعد حل المشكلة.
اول شي على Insert:
اصبح الان كل الى علينا لما نجي نضيف اسم الطالب فقط نضيف CS بدون ماتشيل هم معلومات الفرع الباقي لانه سيبقي زي ماكان
ملاحظه الامثله بيكون في phpmyadmin بسبب موقع اخر فيه مشكلة.
الرقم 5 تم أضافتها ولكن لما نأتي الى الصوره التالية:
نلاحظ لما اضفت اسم الطالب كان فقط احتاج اضيف CS بدون باقي المعلومات الفرع.
ثاني شي Update:
مثل ماقلنا لو رئيس القسم طلع لسبب من الاسباب
نقدر نغير اسم الرئيس مره وحده فقط
هذي احد من الاشياء الحلوه بعد ماتصلح المشكلة normalization
مثال:
مثل ماتلاحظون فقط تم تعديل اسم الرئيس بدون حاجة تكرار على جدول الطلاب اكثر من مره
فقط من جدول الفرع لانه هو قسم واحد CS.
والاخيره عن Delete: نفرض الطلاب الى كتبت اساميهم غيرو قسمهم او طلعو من جامعة
هنا لازم نحذف بياناتهم بدون مايتأثر بيانات القسم
ولكن بعد ماعملنا normalization وحلينا مشكلتها
الان نستطيع فقط نحذف بيانات الطلاب دون تأثير على جدول القسم
نلاحظ هنا القسم أصبح فارغ آي تم حذف البيانات التي كانت فيها
ولكن لما نشوف الجدول الثاني بالصوره التالية:
معلومات الفرع او القسم موجوده ولكن معلومات الطلاب أختفت اي أنمسحت.
وهنا انتهينا من الشرح
وان شاءالله يكون شرح بسيط ومفهوم و اعرف اخذ وقت طويل شوي بس عشان اوصلكم المعلومة بأبسط طريقة واسهل طريقة بدون اي تعقيدات.
وأشوفكم على خير...