في هذا الدرس 6تصفّح المواضيع
تطبيع قواعد البيانات (Database Normalization) هو المنهجية الهندسية لتنظيم الأعمدة والجداول بهدف القضاء على التكرار غير المبرر وحماية القاعدة من العيوب الثلاثة الشهيرة (Data Anomalies):
- عيب الإدراج (Insertion Anomaly): استحالة تسجيل قسم جديد في الكلية قبل وجود طالب مسجل فيه لدمجهما في جدول واحد.
- عيب التحديث (Update Anomaly): الاضطرار لتعديل اسم القسم في 5000 صف عند تغييره، مما يهدد بتضارب البيانات.
- عيب الحذف (Deletion Anomaly): حذف آخر طالب مسجل في دورة تدريبية يؤدي بالخطأ إلى ضياع بيانات الدورة نفسها من النظام.
-- 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: يميز كل صف بشكل فريد.
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.
-- 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.
-- 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ليس تكراراً خاطئاً، بل هو ضرورة محاسبية لأن سعر المنتج في الكتالوج قد يتغير لاحقاً بينما يجب أن تبقى الفاتورة القديمة ثابتة بالسعر الذي دفعه العميل وقت الشراء. - التخزين المحسوب للقراءة الكثيفة: حفظ المجموع النهائي في الأنظمة الضخمة شريطة ضبطه بمعاملات صارمة أو أعمدة مولدة.
-- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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 لضمان سرعة وسلامة التحديثات.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ استعلامات SQL المشروحة في قسم تكرار البيانات وعيوب التعديل داخل قاعدة بيانات MySQL 8 المحلية وتأكد من مطابقة النتائج.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم الصيغة الأولى وذرية القيم وقارن مخرجات الاستعلام.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
أي صيغة معيارية يتم انتهاكها عند تخزين عدة قيم مفصولة بفواصل مثل "Red, Blue, Green" داخل خلية عمود واحدة؟
تشترط الصيغة المعيارية الأولى (1NF) ذرية القيم وأن تحتوي كل خلية على قيمة مفردة واحدة.
في جدول مفتاحه الأساسي المركب هو (order_id, product_id)، فإن تخزين اسم المنتج product_name فيه ينتهك أي صيغة معيارية؟
لأن اسم المنتج يعتمد جزئياً على product_id وحده وليس على المفتاح المركب كاملاً، فهذا ينتهك الصيغة الثانية (2NF).
في جدول الموظفين ذي المفتاح الأساسي emp_id، فإن تخزين رقم القسم dept_id واسم القسم dept_name معاً ينتهك أي صيغة معيارية؟
اسم القسم يعتمد على رقم القسم (عمود غير مفتاحي)، وهو اعتماد متعدٍّ ينتهك الصيغة المعيارية الثالثة (3NF).
الجدول الذي يحقق الصيغة الأولى (1NF) ويمتلك مفتاحاً أساسياً مكوناً من عمود واحد فقط يعتبر محققاً للصيغة الثانية (2NF) تلقائياً.
صواب؛ لأن الاعتماد الجزئي لا يمكن أن يحدث إلا إذا كان المفتاح الأساسي مركباً من عدة أعمدة.
يُعد تخزين سعر البيع وقت الشراء unit_price_paid داخل جدول عناصر الطلب لقطة تاريخية صحيحة لحماية الفواتير السابقة من تغير أسعار المنتجات لاحقاً.
صواب؛ يمثل السعر وقت الشراء حقيقة تاريخية مرتبطة بالطلب نفسه ويجب عدم تغيرها عند ارتفاع سعر المنتج مستقبلاً.
ما هي العيوب الثلاثة الشهيرة التي يمنعها تطبيع قواعد البيانات؟ (اختر 3 إجابات)
يقضي التطبيع على عيوب الإدراج والتحديث والحذف الناتجة عن تكرار البيانات.
لماذا يُعد إنشاء أعمدة مرقمة باسم skill_1 و skill_2 و skill_3 داخل جدول الموظفين خطأً تصميمياً يخالف 1NF؟
لأنها تشكل مجموعة أعمدة متكررة تقيد عدد المهارات وتملأ الجدول بقيم NULL وتصعّب الاستعلام.
ما هي العبارة الهندسية الشهيرة التي تلخص شروط الصيغ المعيارية الثلاث حتى 3NF؟
كل عمود غير مفتاحي يجب أن يعتمد على المفتاح (1NF)، والمفتاح الكامل (2NF)، ولا شيء غير المفتاح (3NF).