1NF, 2NF, 3NF Normalization in DATABASE

السلام عليكم الجميع 🙂

اليوم راح اشرح عن موضوع مهم عن Normalization و في خطوات لازم تتبعها عشان تتأكد ان يكون الجدول تبع قاعده بيانات خالية من الاخطأ. وايضآ يكون مرتب وجميل وسهل التعامل معاه بالمستقبل.

و راح اشرح عنها بطريقة مبسطة و اوصل المعلومة لكم بحيث تفهمون كيف آلية العمل او طريقة العمل هذا النوع الاستراتيجية في الجداول قاعده بيانات.

  • Normalization: تخطيط او استراتيجية لترتيب البيانات في جدول قاعده بيانات لتجنب من الاخطأ مثل التكرار البيانات اثناء العمل عمل Insert او update او Deletion. طبعآ راح يكون بثلاث خطوات نتبعها عشان نتجنب من هذي الاخطأ هي 1NF, 2NF and 3NF.

هذا مثال الجدول الطلاب بدون Normalization:

Without 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

هذا خطأ لانه اسم الكورس يوجد قيمتين على اسم طالب ولازم كل طالب يكون له قيمة وحده ومميزة

يكون هكذا:

أسم طالبأسم الكورس
AzizMath

النسبه الجدول سوف اقسمها الى جدولين وتصبح هكذا:

student table
Branch Table

هنا تم حل المشكلة عن طريق فصل الجدولين يعني كل قسم واحد يكون فيه اكثر من طالب

يعني وضعنا مفتاح رئيسي تبع 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 بسبب موقع اخر فيه مشكلة.

مثل ماتلاحظون لما اضفت اسم الطالب كان فقط احتاج اضيف CS بدون باقي المعلومات الفرع.

ثاني شي Update:

مثل ماقلنا لو رئيس القسم طلع لسبب من الاسباب

نقدر نغير اسم الرئيس مره وحده فقط 🙂

هذي احد من الاشياء الحلوه بعد ماتصلح المشكلة normalization

مثال:

مثل ماتلاحظون فقط تم تعديل اسم الرئيس بدون حاجة تكرار على جدول الطلاب اكثر من مره

فقط من جدول الفرع لانه هو قسم واحد CS.

والاخيره عن Delete: نفرض الطلاب الى كتبت اساميهم غيرو قسمهم او طلعو من جامعة

هنا لازم نحذف بياناتهم بدون مايتأثر بيانات القسم

ولكن بعد ماعملنا normalization وحلينا مشكلتها

الان نستطيع فقط نحذف بيانات الطلاب دون تأثير على جدول القسم 🙂

مثل ماتلاحظون قبل التطبيق

يوجد قسم الطلاب و قسم الفرع مع بياناتهم

ولكن الان سوف يتم تطبيق الحذف بيانات الطلاب كلها ولكن بيانات الفرع راح تكون موجوده 🙂

وهنا انتهينا من الشرح

وان شاءالله يكون شرح بسيط ومفهوم و اعرف اخذ وقت طويل شوي بس عشان اوصلكم المعلومة بأبسط طريقة واسهل طريقة بدون اي تعقيدات.

عندك سؤال او استفسار او اي شي خبرني و راح اكون جدآ سعيد لمساعدتك 🙂

وايضآ أذا في خطأ او مشكلة خبروني عشان اصلحها.

اشوفكم على خير.