تهدف هذه الوحدة إلى شرح كيفية تصميم قواعد البيانات العلائقية (Relational Database Design) بطريقة تقلل التكرار (Redundancy) وتحمي البيانات من حالات الإدخال، التحديث، والحذف الشاذة.
تهدف هذه الوحدة إلى شرح كيفية تصميم قواعد البيانات العلائقية (Relational Database Design) بطريقة تقلل التكرار (Redundancy) وتحمي البيانات من حالات الإدخال، التحديث، والحذف الشاذة.
التصميم العلاقي (Relational Design) هو عملية هيكلة قواعد البيانات العلائقية لضمان أن تكون البيانات مُخزنة ومنظمة بطريقة فعالة وموثوقة. الهدف الأساسي هو تحقيق أفضل أداء، مرونة، وتقليل التكرار.
عملية إنشاء قاعدة بيانات علائقية بحيث يتم تخزين البيانات في جداول مترابطة (Tables) باستخدام المفاتيح الرئيسية (Primary Keys) والمفاتيح الخارجية (Foreign Keys). هذا يضمن التكامل المرجعي (Referential Integrity) ويُقلل من التكرار (Redundancy).
بدلاً من وضع كل بيانات الموظفين والأقسام في جدول واحد، نقوم بتقسيمها:
جدول الأقسام (Departments) |
جدول الموظفين (Employees) |
|||
|---|---|---|---|---|
DepartmentID (PK) |
DepartmentName |
EmployeeID (PK) |
Name |
DepartmentID (FK) |
D01 |
الموارد البشرية | 101 |
علي | D01 |
D02 |
التسويق | 102 |
سارة | D02 |
D03 |
تكنولوجيا المعلومات | 103 |
فهد | D01 |
الربط بين الجداول: يُربط جدول Employees بجدول Departments باستخدام المفتاح الخارجي DepartmentID في جدول Employees. هذا يضمن أن كل موظف مرتبط بقسم موجود بالفعل، ويُجنّب تكرار اسم القسم لكل موظف.
تحدث هذه الحالة عندما لا يمكن إدخال بيانات جديدة بالكامل في قاعدة البيانات لأن جزءًا من تلك البيانات يعتمد على جزء آخر غير موجود بعد، أو عندما يتطلب إدخال معلومة واحدة إدخال معلومات أخرى لا تزال غير متوفرة.
تحدث عندما يتعذر إدخال بيانات جديدة بشكل كامل بسبب تصميم قاعدة البيانات بطريقة غير صحيحة، أو عندما يكون جدول واحد يجمع معلومات عن كيانات مختلفة، مما يؤدي إلى عدم القدرة على إدخال نوع واحد من البيانات دون توفر النوع الآخر.
تخيل جدولاً واحدًا يُسمى Student_Course يجمع بيانات الطلاب وبيانات المقررات التي يسجلون فيها:
StudentID (PK) |
StudentName |
CourseID |
CourseName |
Instructor |
|---|---|---|---|---|
101 |
أحمد | CS101 |
مقدمة في البرمجة | د. سعيد |
102 |
سارة | DB201 |
قواعد البيانات | د. ليلى |
103 |
خالد | NULL |
NULL |
NULL |
حالة الشذوذ هنا: إذا أردنا إدخال بيانات طالب جديد (مثل خالد - StudentID=103) الذي لم يسجل أي مقرر بعد، فإننا سنواجه مشكلة. إذا كانت حقول CourseID أو CourseName أو Instructor مطلوبة (NOT NULL)، فلن نتمكن من إدخال بيانات الطالب خالد على الإطلاق. حتى لو كانت تسمح بـ NULL، فإن إبقاء هذه الحقول فارغة يعني تخزين معلومات غير مكتملة وغير منطقية.
الحل: تقسيم الجدول إلى جداول منفصلة للطلاب والمقررات، مع جدول وسيط (جدول التسجيل) يربط الطلاب بالمقررات التي يسجلون فيها.
جدول الطلاب (Students) |
جدول المقررات (Courses) |
جدول التسجيل (Enrollment) |
|||||
|---|---|---|---|---|---|---|---|
StudentID (PK) |
StudentName |
CourseID (PK) |
CourseName |
Instructor |
EnrollmentID (PK) |
StudentID (FK) |
CourseID (FK) |
101 |
أحمد | CS101 |
مقدمة في البرمجة | د. سعيد | 1 |
101 |
CS101 |
102 |
سارة | DB201 |
قواعد البيانات | د. ليلى | 2 |
102 |
DB201 |
103 |
خالد | ||||||
الآن يمكن إدخال الطالب "خالد" في جدول Students حتى قبل أن يسجل في أي مقرر. وعندما يسجل في مقرر، تتم إضافة سجل جديد في جدول Enrollment.
تحدث حالة التحديث الشاذة عندما تتسبب تغييرات في جزء واحد من البيانات المتكررة في تعارض أو عدم تناسق، مما يؤدي إلى الحاجة لتحديث نفس المعلومة في عدة أماكن مختلفة.
تحدث عندما تكون نفس المعلومة مخزنة في عدة أماكن داخل نفس الجدول (أو جداول مرتبطة بشكل غير صحيح)، ويتطلب تغيير هذه المعلومة تحديثها في جميع تلك الأماكن. إذا نسيت تحديث أحد التكرارات، سيحدث عدم تناسق البيانات.
لنعد إلى المثال الأول بجدول واحد يجمع بيانات الموظف وقسمه:
EmployeeID (PK) |
Name |
DepartmentName |
DepartmentLocation |
|---|---|---|---|
101 |
علي | الموارد البشرية | الرياض |
102 |
سارة | التسويق | جدة |
103 |
فهد | الموارد البشرية | الرياض |
حالة الشذوذ هنا: إذا قررت الإدارة تغيير DepartmentLocation (موقع القسم) لـ "الموارد البشرية" من "الرياض" إلى "الدمام"، فيجب عليك تحديث كل سجل موظف ينتمي إلى قسم "الموارد البشرية" يدوياً. في هذا المثال، سيتعين تحديث السجلين الخاصين بعلي وفهد.
إذا كان هناك آلاف الموظفين في قسم "الموارد البشرية"، فإن هذه العملية ستكون عرضة للخطأ. إذا نسيت تحديث سجل واحد، سيصبح لديك بيانات غير متناسقة (DepartmentLocation مختلف لنفس القسم).
الحل: تخزين بيانات القسم في جدول منفصل (Departments) وربطه بجدول الموظفين (Employees) باستخدام المفتاح الخارجي DepartmentID.
-- تحديث موقع القسم في الجدول المنفصل
UPDATE Departments
SET DepartmentLocation = 'الدمام'
WHERE DepartmentName = 'الموارد البشرية';
بهذا، يكفي تحديث سجل واحد فقط في جدول الأقسام، وستنعكس التغييرات تلقائيًا على جميع الموظفين المرتبطين، مما يزيل مخاطر عدم التناسق.
تحدث حالة الحذف الشاذة عندما يؤدي حذف سجل معين إلى فقدان بيانات أخرى مهمة لا تتعلق مباشرة بالسجل الذي تم حذفه، وذلك بسبب تخزين معلومات متعددة في نفس السجل.
تحدث عندما يؤدي حذف صف واحد من الجدول إلى فقدان معلومات أخرى قيمة لم تكن هي الهدف من عملية الحذف، وذلك نتيجة لتضمين بيانات كيانات مختلفة في جدول واحد بشكل غير صحيح.
لنعد إلى الجدول المدمج Student_Course:
StudentID (PK) |
StudentName |
CourseID |
CourseName |
Instructor |
|---|---|---|---|---|
101 |
أحمد | CS101 |
مقدمة في البرمجة | د. سعيد |
104 |
ليلى | PH101 |
الفلسفة الحديثة | د. عمر |
حالة الشذوذ هنا: تخيل أن الطالبة "ليلى" (StudentID=104) هي الطالبة الوحيدة المسجلة في مقرر "الفلسفة الحديثة" (CourseID=PH101). إذا قررنا حذف سجل الطالبة "ليلى" من الجدول (لأنها انسحبت من الجامعة، مثلاً):
DELETE FROM Student_Course
WHERE StudentID = 104;
سيتم حذف كامل الصف. المشكلة هي أننا لن نفقد فقط معلومات الطالبة "ليلى"، بل سنفقد أيضًا كل المعلومات المتعلقة بمقرر "الفلسفة الحديثة" (CourseName وInstructor) من قاعدة البيانات، لأنه لم يكن هناك أي طالب آخر مسجل فيه!
الحل: استخدام جداول منفصلة لكل كيان (الطلاب، المقررات، التسجيل) وربطها بعلاقات صحيحة. بهذه الطريقة، عند حذف طالب، سيُحذف سجله من جدول الطلاب، وسجلات تسجيله من جدول التسجيل، لكن معلومات المقرر ستبقى سليمة في جدول المقررات.
تجنب حالات الشذوذ (Anomalies) هو هدف أساسي في تصميم قواعد البيانات العلائقية الجيدة. يتم تحقيق ذلك من خلال مجموعة من الممارسات المنهجية:
هذا هو المبدأ التوجيهي الرئيسي. يجب ألا تُخزن نفس المعلومة أكثر من مرة واحدة في قاعدة البيانات. إذا كان يجب تكرارها (مثل المفاتيح الخارجية)، فيجب أن يكون ذلك لغرض واضح (مثل الربط بين الجداول) وليس لتخزين نفس البيانات الوصفية بشكل متكرر.
Departments وربطه بـ Employees باستخدام DepartmentID (مفتاح خارجي).
المفاتيح هي أساس ضمان التكامل والربط الصحيح بين الجداول. تضمن المفاتيح الرئيسية فرادة كل سجل، بينما تضمن المفاتيح الخارجية صحة العلاقات بين الجداول المختلفة.
التطبيع هو عملية منهجية لتحليل وتصميم الجداول في قاعدة البيانات لتقليل التكرار وحالات الشذوذ. يتم ذلك عن طريق تحويل الجداول إلى أشكال طبيعية (Normal Forms) محددة، مثل:
بالإضافة إلى المفاتيح، يمكن استخدام قيود أخرى لفرض قواعد عمل وضمان سلامة البيانات:
NOT NULL: يضمن عدم ترك حقل فارغ.UNIQUE: يضمن فرادة القيم في عمود معين (مثل رقم الجوال الفريد).CHECK: يفرض شرطًا على قيم العمود (مثل العمر بين 18 و 60).DEFAULT: يُحدد قيمة افتراضية للعمود إذا لم تُدخل قيمة.الـ Views هي جداول افتراضية (Virtual Tables) مبنية على استعلامات SQL. تُستخدم لتقديم بيانات مجمعة أو مُبسطة للمستخدمين دون الحاجة إلى تعديل الجداول الأساسية. هي لا تُجنب حالات الشذوذ في التصميم، ولكنها تُخفي تعقيد البيانات الأساسية وتُقدم رؤية مخصصة للمستخدمين.
| المصطلح (الإنجليزية) | المصطلح (العربية) | التعريف |
|---|---|---|
| Relational Database Design | تصميم قاعدة البيانات العلائقية | عملية هيكلة قواعد البيانات العلائقية لضمان فعالية التخزين وتقليل التكرار. |
| Redundancy | التكرار | وجود نفس البيانات في أكثر من جدول أو سجل، مما قد يؤدي إلى تضارب أو استهلاك مساحة إضافية. |
| Anomaly | شذوذ / حالة شاذة | مشاكل تحدث في قاعدة البيانات بسبب سوء التصميم، مثل صعوبة الإدخال، التحديث، أو الحذف. |
| Insertion Anomaly | حالة الإدخال الشاذة | صعوبة إدخال بيانات جديدة بسبب تصميم قاعدة البيانات غير الصحيح أو اعتمادها على بيانات أخرى. |
| Update Anomaly | حالة التحديث الشاذة | تضارب أو فقدان التناسق عند تعديل البيانات المتكررة في أماكن متعددة. |
| Deletion Anomaly | حالة الحذف الشاذة | فقدان بيانات أخرى مهمة (غير مستهدفة بالحذف) عند حذف سجل معين. |
| Normalization | التطبيع | عملية منهجية لتنظيم البيانات وتقسيمها في جداول لتقليل التكرار والحالات الشاذة، وذلك بتحويلها إلى أشكال طبيعية. |
| Normal Form (NF) | الشكل الطبيعي | مجموعة من القواعد التي تُطبق على الجداول لتقليل التكرار والاعتماديات غير المرغوبة. |
| Primary Key (PK) | المفتاح الرئيسي | حقل أو مجموعة حقول تميز كل سجل بشكل فريد في الجدول. |
| Foreign Key (FK) | المفتاح الخارجي | حقل في جدول يشير إلى المفتاح الرئيسي في جدول آخر لإنشاء علاقة. |
| Data Integrity | سلامة البيانات | ضمان دقة، صحة، وتناسق البيانات وحمايتها من التلف. |
| View | واجهة عرض | جدول افتراضي (نتيجة استعلام) يُقدم رؤية مخصصة للبيانات دون تخزينها فعليًا. |
اختبر فهمك لمفاهيم هذه الوحدة بالإجابة على الأسئلة التالية: