5 أشكال طبيعية لقواعد البيانات يجب أن يعرفها المطوّرون مع أمثلة عملية

تعلم الأشكال الطبيعية (Normal Forms) ضروري لكل مطوّر لضمان تنظيم البيانات بشكل جيد، تقليل التكرار، وسهولة الصيانة والأداء العالي لقواعد البيانات. في هذا المقال نشرح الأشكال الطبيعية باستخدام أمثلة جديدة مبسطة وعملية.
1️⃣ الشكل الطبيعي الأول (1NF)
يضمن الشكل الطبيعي الأول أن كل عمود يحتوي على قيمة ذرية واحدة فقط وغير قابلة للتقسيم.
مثال: لدينا جدول الحجوزات يحتوي على أعمدة تحتوي على عدة أرقام تذاكر:
BookingID | CustomerName | Tickets
------------------------------------------
B001 | Ali Ahmed | T01, T02, T03
بعد التحويل إلى 1NF:
BookingID | CustomerName | Ticket
------------------------------------------
B001 | Ali Ahmed | T01
B001 | Ali Ahmed | T02
B001 | Ali Ahmed | T03
2️⃣ الشكل الطبيعي الثاني (2NF)
يضمن الشكل الطبيعي الثاني أن كل عمود غير مفتاح يعتمد بالكامل على المفتاح الأساسي وليس جزءاً منه فقط.
مثال: لدينا جدول يحتوي على معرف الحجز ورقم التذكرة واسم العميل:
BookingID | Ticket | CustomerName
----------------------------------------
B001 | T01 | Ali Ahmed
B001 | T02 | Ali Ahmed
هنا اسم العميل يعتمد فقط على BookingID وليس على (BookingID + Ticket) كمفتاح مركب.
بعد التحويل إلى 2NF:
نقسم الجدول إلى:
Table: Bookings
BookingID | CustomerName
---------------------------
B001 | Ali Ahmed
Table: BookingTickets
BookingID | Ticket
--------------------
B001 | T01
B001 | T02
3️⃣ الشكل الطبيعي الثالث (3NF)
يزيل الشكل الطبيعي الثالث الاعتماد الانتقالي بين الأعمدة، بحيث تعتمد الأعمدة غير الرئيسية فقط على المفتاح الأساسي.
مثال: جدول يحتوي على البريد الإلكتروني واسم العميل والدولة:
Email | CustomerName | Country
----------------------------------------------
ali@mail.com | Ali Ahmed | Jordan
اسم الدولة يعتمد على اسم العميل وليس البريد مباشرة.
بعد التحويل إلى 3NF:
Table: Customers
Email | CustomerName
-------------------------------
ali@mail.com | Ali Ahmed
Table: CustomerCountries
CustomerName | Country
-------------------------
Ali Ahmed | Jordan
4️⃣ شكل بويس-كود الطبيعي (BCNF)
يقوّي 3NF ويضمن أن أي عمود يحدد عموداً آخر يجب أن يكون مفتاحاً.
مثال: جدول تسجيل المواد الدراسية يحتوي على:
CourseID | Room | Instructor
-------------------------------
C101 | R1 | Dr Omar
C102 | R2 | Dr Samir
إذا كان كل غرفة مرتبطة بمعلم محدد، فالغرفة تحدد المعلم.
بعد التحويل إلى BCNF:
Table: RoomInstructor
Room | Instructor
---------------------
R1 | Dr Omar
R2 | Dr Samir
Table: CourseRoom
CourseID | Room
-----------------
C101 | R1
C102 | R2
5️⃣ الشكل الطبيعي الرابع (4NF)
يضمن ألا يحتوي الجدول على علاقات متعددة مستقلة من نوع واحد إلى متعدد لنفس الكيان.
مثال: لدينا جدول يحتوي على مهارات الموظف والمشاريع التي يعمل عليها:
EmployeeID | Skill | Project
---------------------------------
E001 | Python | P01
E001 | Java | P01
E001 | Python | P02
بعد التحويل إلى 4NF:
Table: EmployeeSkills
EmployeeID | Skill
-----------------------
E001 | Python
E001 | Java
Table: EmployeeProjects
EmployeeID | Project
------------------------
E001 | P01
E001 | P02
📌 الخلاصة
تعلم هذه الأشكال الطبيعية ضروري لضمان قواعد بيانات سهلة الصيانة، خالية من التكرار، وتحقق أفضل أداء للتطبيقات البرمجية مع مرور الوقت.
إذا أردت المزيد من المقالات التعليمية العملية مثل هذا، يمكنك متابعتي لمزيد من شروحات قواعد البيانات والتطبيقات البرمجية الاحترافية.
أضف تعليق