🗄️ النموذج العلائقي

أساس أنظمة قواعد البيانات الحديثة: العلاقات، القيود، والعمليات

📚 الفصل ٤
🎯 CS 340
👩‍🎓 Shoug Alomran
⏱️ ملخص شامل

📑 المحتويات

📜

مقدمة وتاريخ

تطور النموذج العلائقي

🎯 الثورة العلائقية

قدّمه Edgar Codd عام 1970، النموذج العلائقي غيّر شكل أنظمة إدارة قواعد البيانات. استبدل النماذج المعقّدة (التسلسلية والشبكية) بطريقة بسيطة وأنيقة قائمة على الجداول.

ليش النموذج العلائقي هو اللي انتصر؟

❌ النماذج القديمة

  • تنقّل معقّد
  • تحتاج كود برمجي كبير
  • صعوبة في الاستعلام
  • مرتبطة بتخزين البيانات

✅ النموذج العلائقي

  • هيكل بسيط (جداول)
  • استعلامات تعريفية (SQL)
  • استقلالية البيانات
  • سهل الفهم والاستخدام
1

البساطة

العنصر الأساسي هو الجدول - سهل تفهمه وتشتغل عليه

2

استقلالية البيانات المادية

تقدّر تغيّر في التخزين (مادي) بدون ما تأثر على الهيكل المنطقي

3

استقلالية البيانات المنطقية

تقدّر تغيّر في المخطط المفاهيمي بدون ما تعدّل التطبيقات (عرض Views)

🏆 هيمنة السوق

اليوم، النموذج العلائقي هو أكثر نموذج مستخدم في العالم. المنافسين مثل NoSQL وقواعد بيانات XML ما حققوا نفس الشهرة أو الانتشار.

📊

المفاهيم الأساسية للنموذج العلائقي

فهم العلاقات، الصفوف، والأعمدة

المصطلحات الرسمية vs الدارجة

مصطلح دارج مصطلح رسمي شرح
جدول علاقة (Relation) مجموعة من الصفوف والأعمدة تمثل كيانات
عنوان العمود خاصية (Attribute) حقل أو خاصية في العلاقة
كل القيم الممكنة للعمود نطاق (Domain) مجموعة القيم المسموحة للخاصية
صف صف (Tuple) سجل واحد داخل العلاقة
تعريف الجدول مخطط العلاقة هيكل التعريف مع الخصائص والأنواع
الجدول بعد تعبئته حالة/نسخة العلاقة البيانات الفعلية في لحظة معينة
📘 مكونات النموذج العلائقي

قاعدة البيانات العلائقية تتكوّن من:

  • العلاقات: مجموعة جداول، كل جدول له جزئين:
    • المخطط: الاسم والهيكل (مثال: Employee(ID: string, Name: string, DOB: date))
    • النسخة: البيانات الحالية - الصفوف والأعمدة
  • مخطط قاعدة البيانات: كل مخططات العلاقات مع بعض
  • نسخة قاعدة البيانات: كل نسخ العلاقات في لحظة معينة

مقاييس مهمة

الدرجة (Degree)

عدد الأعمدة (الخصائص) في العلاقة

STUDENT(ID, Name, Major) درجتها = ٣

العدد (Cardinality)

عدد الصفوف في العلاقة

لو STUDENT فيه ٥٠٠ طالب، الكارديناليتي = ٥٠٠

💡 مثال علاقة

مخطط علاقة STUDENT:

STUDENT(Student_number: String, Name: String, Class: Integer, Major: String)

مثال لنسخة:

Student_number Name Class Major
17 أحمد علي 1 CS
8 سارة خالد 2 SE

خصائص العلاقات

الصفات اللي تحدّد الجداول العلائقية

1

قيم ذرية (1NF)

كل القيم تكون ذرية (غير قابلة للتجزئة). ممنوع الخصائص المركبة أو متعددة القيم. هذا اسمه الصورة الطبيعية الأولى.

2

قيد النطاق

كل قيمة في الصف لازم تكون من نطاق الخاصية، أو تقدر تكون NULL إذا مسموح.

3

الصفوف غير مرتبة

الصفوف في العلاقة ما لها ترتيب، حتى لو شفتها مرتبة بالجدول.

4

الأعمدة مرتبة

الخصائص وقيمها داخل الصف تُعتبر مرتبة (مع إن في تعريفات ثانية).

🔤 تمثيل ذاتي الوصف

في طريقة ثانية للتمثيل ما تحتاج ترتيب للخصائص، وتحوي الاسم والقيمة مع بعض:

t = { <name, "أحمد">, <SSN, 123456789> }

هذا يُسمّى تمثيل ذاتي الوصف.

🌐 قيم NULL

قيمة NULL خاصّة تستخدم عشان تمثّل قيم:

  • غير معروفة: القيمة موجودة بس مو معروفه
  • غير متاحة: القيمة حالياً مو متوفرة
  • غير منطبقة: الخاصية ما تنطبق على هذا الصف
🔐

قيود النموذج العلائقي

قواعد تضمن سلامة البيانات

📋 وش هي القيود؟

القيود هي شروط لازم تنطبق على كل حالات العلاقة الصحيحة. تضبط دقة البيانات واتساقها وسلامتها.

أنواع القيود المخططية

🔑

١. قيد المفتاح

قيد التفرد: ما في صفين عندهم نفس القيم لخصائص المفتاح.

  • المفتاح الفائق: مجموعة خصائص تحدّد الصف بشكل فريد
  • مفتاح مرشح: مفتاح فائق أصغر (ما فيه خصائص زايدة)
  • مفتاح أساسي: المفتاح المرشح اللي نختاره (يُخطّ تحته)
CAR(SerialNo, Make, Model, Year)

SerialNo هو المفتاح الأساسي

٢. سلامة الكيان

المفتاح الأساسي لا يقبل NULL: خصائص PK ما تقدر تكون null في أي صف.

t[PK] ≠ null لأي صف t في r(R)

ليش؟ قيم المفتاح الأساسي تحدّد الصفوف بشكل فردي. بدون قيمة، الصف ما ينعرف.

🔗

٣. سلامة المرجعية

قيد المفتاح الخارجي: يضمن الاتساق بين العلاقات المترابطة.

الصف في العلاقة المرجعية R1 عنده مفتاح خارجي (FK) يشير إلى المفتاح الأساسي (PK) في العلاقة المرجع فيها R2.

قيمة FK لازم تكون:

  • قيمة PK موجودة في R2، أو
  • NULL (إذا FK مو جزء من PK في R1)
📦

٤. قيود النطاق

قيد النوع: كل قيمة لازم تكون من نطاق الخاصية.

إذا نطاق Age هو Integer(0-120)، إذن:

  • ✅ Age = 25 (صح)
  • ❌ Age = "خمسة وعشرين" (غلط - نوع خطأ)
  • ❌ Age = 150 (غلط - خارج النطاق)
🚫

٥. قيود NULL

تحدّد إذا قيم NULL مسموحة لخصائص معينة.

إذا كل STUDENT لازم يكون عنده اسم صحيح:

Name NOT NULL
💡 مثال سلامة مرجعية

السيناريو: EMPLOYEE يشير إلى DEPARTMENT

EMPLOYEE(SSN, Name, Salary, D_num) DEPARTMENT(Dnumber, Dname) المفتاح الخارجي: D_num في EMPLOYEE يشير إلى Dnumber في DEPARTMENT

كل D_num للموظف لازم يطابق Dnumber موجود في DEPARTMENT (أو يكون NULL إذا مسموح).

🎨 عرض سلامة المرجعية

في مخططات قاعدة البيانات العلائقية:

  • العلاقات تُعرض كصفوف بأسماء الخصائص
  • خصائص المفتاح الأساسي تُخطّ تحتها
  • قيود المفاتيح الخارجية تُعرض كـ أسهم موجهة من FK إلى العلاقة المرجع فيها
⚙️

عمليات التحديث على العلاقات

تعديل حالة قاعدة البيانات

🔄 ثلاث عمليات أساسية

حالة قاعدة البيانات تتغيّر من خلال ثلاث عمليات:

إدراج (INSERT)

يضيف صف جديد إلى العلاقة

حذف (DELETE)

يحذف صف موجود من العلاقة

✏️

تعديل (UPDATE)

يغيّر قيم خصائص صف موجود

⚠️ قواعد مهمة
  • ما يجوز مخالفة قيود التكامل في عمليات التحديث
  • بعض عمليات التحديث تحتاج ندمجها مع بعض
  • التحديثات ممكن تتسلسل وتسبب تحديثات ثانية تلقائياً عشان نحافظ على التكامل
🔄 انتقال الحالات

كل عملية تحديث تخلق حالة قاعدة بيانات جديدة. حالة قاعدة البيانات العلائقية هي اتحاد كل حالات العلاقات الفردية في تلك اللحظة.

⚠️

التعامل مع مخالفات القيود

كيف كل عملية تخالف القيود

مخالفات عملية INSERT

📦

قيد النطاق

يُخالف إذا قيمة الخاصية مو من النطاق المحدد

❌ INSERT STUDENT(123, "أحمد", "أول سنة", "CS")

إذا Class لازم يكون Integer، "أول سنة" يخالف قيد النطاق

🔑

قيد المفتاح

يُخالف إذا قيمة المفتاح موجودة مسبقاً

❌ INSERT STUDENT(123, "سارة", 2, "SE")

إذا Student_number 123 موجود من قبل، يخالف قيد التفرد

🔗

سلامة المرجعية

يُخالف إذا FK يشير إلى PK غير موجود

❌ INSERT EMPLOYEE(..., D_num=99)

إذا القسم ٩٩ غير موجود، يخالف سلامة المرجعية

سلامة الكيان

يُخالف إذا قيمة PK = NULL

❌ INSERT STUDENT(NULL, "عمر", 1, "IT")

المفتاح الأساسي ما يقبل NULL

مخالفات عملية DELETE

🗑️ خطر سلامة المرجعية

DELETE ممكن يخالف سلامة المرجعية إذا قيمة PK اللي بنحذفها مرجعية من FK في صفوف ثانية.

🛠️ خيارات المعالجة

لما الحذف يخالف سلامة المرجعية:

  • RESTRICT: نرفض عملية الحذف
  • CASCADE: نحذف الصفوف المرجعية بعد (ننشر الحذف)
  • SET NULL: نحط قيم المفاتيح الخارجية في الصفوف المرجعية NULL

واحد من هالخيارات لازم نحدّده أثناء تصميم قاعدة البيانات لكل قيد FK.

💡 أمثلة DELETE
DELETE EMPLOYEE WHERE SSN = '333445555'

إذا هذا الموظف مرجعي من:

  • صفوف EMPLOYEE ثانية (كمشرف)
  • صفوف DEPARTMENT (كمدير)
  • صفوف WORKS_ON
  • صفوف DEPENDENT

هذا الحذف غير مقبول بدون CASCADE أو معالجة ثانية.

مخالفات عملية UPDATE (MODIFY)

✏️ فحوصات UPDATE

تعديل صف ممكن يخالف القيود مثل INSERT و DELETE:

  • تغيير PK → ممكن يخالف قيد المفتاح أو يسبب مشاكل في سلامة المرجعية
  • تغيير FK → ممكن يخالف سلامة المرجعية
  • تغيير أي خاصية → ممكن يخالف قيود النطاق
🔄 تحديثات متسلسلة

خيارات مشابهة لعمليات UPDATE:

  • RESTRICT: نرفض التعديل
  • CASCADE: ننشر التغييرات على الصفوف المرجعية
  • SET NULL: نحط FKs المتأثرة NULL

ملخص الفصل

أهم النقاط من النموذج العلائقي

📊 الهيكل الأساسي

العلاقات (جداول) مع الصفوف والأعمدة هي أساس قواعد البيانات الحديثة

✨ البساطة

التجريد بالجداول سهل الفهم، وخلّى قواعد البيانات العلائقية منتشرة ومقبولة

🔐 التكامل

أربع قيود رئيسية (النطاق، المفتاح، الكيان، المرجعية) تضبط دقة البيانات واتساقها

⚙️ العمليات

INSERT, DELETE, UPDATE يعدّلون حالة قاعدة البيانات ويحترمون قيود التكامل

🔗 العلاقات

المفاتيح الخارجية تخلق علاقات بين الجداول وتضمن سلامة المرجعية

🎯 الاستقلالية

استقلالية البيانات المادية والمنطقية تفصل التخزين عن الهيكل، والهيكل عن التطبيقات

🎓 الخطوات الجاية

مع إننا أسسنا النموذج العلائقي، نقدر ننتقل إلى:

  • تعلّم SQL للاستعلام والتعديل على قواعد البيانات العلائقية
  • فهم التسوية الطبيعية لتصميم قواعد بيانات مثالي
  • استكشاف إدارة المعاملات والتحكم بالتزامن
  • دراسة تحسين الاستعلامات واستراتيجيات الفهرسة