انتقل إلى محتوى الدرس
الدرس 39
دورة MySQL

تطبيع قواعد البيانات والصيغ المعيارية الأولى والثانية والثالثة في MySQLMySQL Database Normalization First Second and Third Normal Forms

تعلّم تطبيع قواعد البيانات والصيغ المعيارية الأولى والثانية والثالثة في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تطبيع قواعد البيانات (Database Normalization) هو المنهجية الهندسية لتنظيم الأعمدة والجداول بهدف القضاء على التكرار غير المبرر وحماية القاعدة من العيوب الثلاثة الشهيرة (Data Anomalies):

  • عيب الإدراج (Insertion Anomaly): استحالة تسجيل قسم جديد في الكلية قبل وجود طالب مسجل فيه لدمجهما في جدول واحد.
  • عيب التحديث (Update Anomaly): الاضطرار لتعديل اسم القسم في 5000 صف عند تغييره، مما يهدد بتضارب البيانات.
  • عيب الحذف (Deletion Anomaly): حذف آخر طالب مسجل في دورة تدريبية يؤدي بالخطأ إلى ضياع بيانات الدورة نفسها من النظام.
مخطط يوضح تدرج تطبيع قواعد البيانات عبر الصيغة المعيارية الأولى 1NF والثانية 2NF والثالثة 3NF في MySQL 8
SQL
-- Normalized parent table stores department facts once
CREATE TABLE departments (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  dept_name VARCHAR(80) NOT NULL UNIQUE,
  building_code VARCHAR(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

يحقق الجدول الصيغة المعيارية الأولى (1NF) عندما يلتزم بثلاث قواعد تأسيسية صارمة:

  • ذرية القيم (Atomicity): تحتوي كل خلية في الجدول على قيمة مفردة واحدة غير قابلة للتجزئة، ويُمنع تخزين قوائم مفصولة بفواصل مثل 'SQL, PHP, Git' داخل خلية نصية واحدة.
  • منع مجموعات الأعمدة المتكررة: لا تنشئ أعمدة مرقمة مثل phone_1 وphone_2؛ بل افصلها في جدول ابن مرتبط بمفتاح أجنبي.
  • وجود مفتاح أساسي PRIMARY KEY: يميز كل صف بشكل فريد.
SQL
CREATE TABLE user_phones (
  user_id INT UNSIGNED NOT NULL,
  phone_e164 VARCHAR(20) NOT NULL,
  is_primary TINYINT(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (user_id, phone_e164)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

يكون الجدول في الصيغة المعيارية الثانية (2NF) إذا حقق الصيغة الأولى 1NF وخلا تماماً من الاعتماد الجزئي (Partial Dependency):

  • تظهر في الجداول ذات المفتاح الأساسي المركب: إذا كان المفتاح الأساسي مركباً من عمودين مثل (order_id, product_id)، فيجب أن يعتمد كل عمود آخر في الجدول على المفتاح المركب كاملاً (مثل الكمية quantity).
  • علاج مخالفة 2NF: عمود مثل اسم المنتج product_title يعتمد على product_id وحده فقط؛ لذا يُنقل فوراً إلى جدول المنتجات products.
SQL
-- 2NF Compliant: quantity depends on BOTH order_id and product_id
CREATE TABLE invoice_lines (
  invoice_id INT UNSIGNED NOT NULL,
  product_id INT UNSIGNED NOT NULL,
  quantity SMALLINT UNSIGNED NOT NULL,
  PRIMARY KEY (invoice_id, product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

يصل الجدول إلى الصيغة المعيارية الثالثة (3NF) عندما يحقق 2NF ويخلو من أي اعتماد متعدٍّ (Transitive Dependency) بين الأعمدة غير المفتاحية:

  • ما هو الاعتماد المتعدي؟ أن يعتمد العمود C على العمود غير المفتاحي B، بينما يعتمد B على المفتاح الأساسي A (مثل: رقم الموظف يحدد رقم القسم، ورقم القسم يحدد اسم مدير القسم).
  • العلاج الهندسي لـ 3NF: يُفصل اسم مدير القسم وميزانية القسم إلى جدول الأقسام departments، ويكتفي جدول الموظفين بالمفتاح الأجنبي dept_id.
SQL
-- 3NF Compliant: every non-key column depends directly on id
CREATE TABLE staff_members (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  staff_name VARCHAR(100) NOT NULL,
  salary DECIMAL(10, 2) NOT NULL,
  dept_id INT UNSIGNED NOT NULL,
  FOREIGN KEY (dept_id) REFERENCES departments(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

في هندسة قواعد البيانات الإنتاجية، تمثل الصيغة المعيارية الثالثة 3NF المعيار الافتراضي الواجب اتباعه؛ غير أن هناك حالتين عمليتين مهمتين يحتفظ فيهما المهندس بعمود إضافي عن وعي:

  • أعمدة اللقطة التاريخية (Historical Snapshot): حفظ عمود سعر البيع unit_price داخل جدول عناصر الفاتورة order_items ليس تكراراً خاطئاً، بل هو ضرورة محاسبية لأن سعر المنتج في الكتالوج قد يتغير لاحقاً بينما يجب أن تبقى الفاتورة القديمة ثابتة بالسعر الذي دفعه العميل وقت الشراء.
  • التخزين المحسوب للقراءة الكثيفة: حفظ المجموع النهائي في الأنظمة الضخمة شريطة ضبطه بمعاملات صارمة أو أعمدة مولدة.
SQL
-- Historical snapshot: unit_price_paid preserves checkout price
CREATE TABLE order_line_snapshots (
  order_id INT UNSIGNED NOT NULL,
  product_id INT UNSIGNED NOT NULL,
  qty SMALLINT UNSIGNED NOT NULL,
  unit_price_paid DECIMAL(10, 2) NOT NULL,
  PRIMARY KEY (order_id, product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

يلخص الجدول المرجعي التالي مراحل تطبيع قواعد البيانات من الصيغة الأولى حتى الصيغة الثالثة في MySQL 8:

الصيغة المعياريةالشرط الهندسي الأساسيالمشكلة التي تقضي عليهاالإجراء التطبيقي
الأولى (1NF)قيم ذرية مفردة ومفتاح أساسيالقوائم المفصولة بفواصل والأعمدة المتكررةفصل القيم المتعددة في صفوف مستقلة
الثانية (2NF)1NF + الاعتماد على المفتاح المركب كاملاًالاعتماد الجزئي على نصف المفتاح المركبنقل الأعمدة التابعة لجزء من المفتاح لجدولها
الثالثة (3NF)2NF + الاعتماد المباشر على المفتاح فقطالاعتماد المتعدي بين الأعمدة غير المفتاحيةفصل الكيانات التابعة في جداول مرجعية
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس مخاطر تكرار البيانات وعيوب الإدراج والتحديث والحذف، وشروط الصيغة المعيارية الأولى (1NF) لذرية القيم، والصيغة الثانية (2NF) لمنع الاعتماد الجزئي على المفتاح المركب، والصيغة الثالثة (3NF) لمنع الاعتماد المتعدي، والفرق بين التكرار الخاطئ وأعمدة اللقطة التاريخية.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس الأربعين «تصميم مخطط قاعدة بيانات علائقية متكامل والأعمدة المولدة في MySQL» لبناء مخطط متجر إنتاجي متكامل واستخدام الأعمدة المولدة GENERATED ALWAYS AS.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Normal Forms تطبيع البيانات
تعلّم تطبيع قواعد البيانات والصيغ المعيارية الأولى والثانية والثالثة في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
للمراجعة
02 Data Redundancy and Anomalies تكرار البيانات وعيوب التعديل
المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم تكرار البيانات وعيوب التعديل في MySQL 8.
للمراجعة
03 First Normal Form Atomic Columns الصيغة الأولى وذرية القيم
المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم الصيغة الأولى وذرية القيم في MySQL 8.
للمراجعة
04 Second Normal Form Full Dependency الصيغة الثانية والاعتماد الكامل
المفهوم الهندسي وصياغة استعلام SQL القياسية لقسم الصيغة الثانية والاعتماد الكامل في MySQL 8.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 1NF 1NF
First Normal Form
الصيغة المعيارية الأولى وتشترط أن تكون جميع القيم ذرية مفردة مع وجود مفتاح أساسي.
للمراجعة
02 2NF 2NF
Second Normal Form
الصيغة المعيارية الثانية وتشترط اعتماد كل عمود على المفتاح الأساسي المركب بالكامل.
للمراجعة
03 3NF 3NF
Third Normal Form
الصيغة المعيارية الثالثة وتشترط عدم اعتماد أي عمود غير مفتاحي على عمود غير مفتاحي آخر.
للمراجعة
04 OLTP OLTP
Online Transaction Processing
أنظمة معالجة المعاملات الحية التي تعتمد على التطبيع 3NF لضمان سرعة وسلامة التحديثات.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ استعلامات SQL المشروحة في قسم تكرار البيانات وعيوب التعديل داخل قاعدة بيانات MySQL 8 المحلية وتأكد من مطابقة النتائج.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم الصيغة الأولى وذرية القيم وقارن مخرجات الاستعلام.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

أي صيغة معيارية يتم انتهاكها عند تخزين عدة قيم مفصولة بفواصل مثل "Red, Blue, Green" داخل خلية عمود واحدة؟

تشترط الصيغة المعيارية الأولى (1NF) ذرية القيم وأن تحتوي كل خلية على قيمة مفردة واحدة.

02

في جدول مفتاحه الأساسي المركب هو (order_id, product_id)، فإن تخزين اسم المنتج product_name فيه ينتهك أي صيغة معيارية؟

لأن اسم المنتج يعتمد جزئياً على product_id وحده وليس على المفتاح المركب كاملاً، فهذا ينتهك الصيغة الثانية (2NF).

03

في جدول الموظفين ذي المفتاح الأساسي emp_id، فإن تخزين رقم القسم dept_id واسم القسم dept_name معاً ينتهك أي صيغة معيارية؟

اسم القسم يعتمد على رقم القسم (عمود غير مفتاحي)، وهو اعتماد متعدٍّ ينتهك الصيغة المعيارية الثالثة (3NF).

04

الجدول الذي يحقق الصيغة الأولى (1NF) ويمتلك مفتاحاً أساسياً مكوناً من عمود واحد فقط يعتبر محققاً للصيغة الثانية (2NF) تلقائياً.

صواب؛ لأن الاعتماد الجزئي لا يمكن أن يحدث إلا إذا كان المفتاح الأساسي مركباً من عدة أعمدة.

05

يُعد تخزين سعر البيع وقت الشراء unit_price_paid داخل جدول عناصر الطلب لقطة تاريخية صحيحة لحماية الفواتير السابقة من تغير أسعار المنتجات لاحقاً.

صواب؛ يمثل السعر وقت الشراء حقيقة تاريخية مرتبطة بالطلب نفسه ويجب عدم تغيرها عند ارتفاع سعر المنتج مستقبلاً.

06

ما هي العيوب الثلاثة الشهيرة التي يمنعها تطبيع قواعد البيانات؟ (اختر 3 إجابات)

يقضي التطبيع على عيوب الإدراج والتحديث والحذف الناتجة عن تكرار البيانات.

07

لماذا يُعد إنشاء أعمدة مرقمة باسم skill_1 و skill_2 و skill_3 داخل جدول الموظفين خطأً تصميمياً يخالف 1NF؟

لأنها تشكل مجموعة أعمدة متكررة تقيد عدد المهارات وتملأ الجدول بقيم NULL وتصعّب الاستعلام.

08

ما هي العبارة الهندسية الشهيرة التي تلخص شروط الصيغ المعيارية الثلاث حتى 3NF؟

كل عمود غير مفتاحي يجب أن يعتمد على المفتاح (1NF)، والمفتاح الكامل (2NF)، ولا شيء غير المفتاح (3NF).