الوحدة 9: الاعتماديات الوظيفية (Functional Dependencies)

تهدف هذه الوحدة إلى شرح الاعتماديات الوظيفية وأهميتها في تصميم قواعد البيانات العلائقية، وكيفية تحليل البيانات لضمان التطبيع (Normalization) وحماية البيانات من التكرار وحالات الشذوذ.

الهدف من الوحدة

تهدف هذه الوحدة إلى شرح الاعتماديات الوظيفية (Functional Dependencies) وأهميتها في تصميم قواعد البيانات العلائقية، وكيفية تحليل البيانات لضمان التطبيع (Normalization) وحماية البيانات من التكرار وحالات الشذوذ.

9.1 قواعد الاعتماديات الوظيفية (Functional Dependencies Rules)

تُعد الاعتماديات الوظيفية (Functional Dependencies - FDs) حجر الزاوية في فهم وتطبيق عملية التطبيع (Normalization) في قواعد البيانات العلائقية. إنها تصف العلاقات بين السمات (الأعمدة) داخل الجدول.

  • تعريف:

    الاعتمادية الوظيفية هي علاقة بين مجموعتين من السمات (الحقول) في الجدول بحيث تُحدد مجموعة واحدة (المُحدِّد - Determinant) قيمة مجموعة أخرى (المُعتمد - Dependent) بشكل فريد. بعبارة أخرى، إذا عرفت قيمة السمات في المجموعة الأولى، يمكنك تحديد قيمة السمات في المجموعة الثانية بشكل مؤكد.

    يُرمز لها بـ: $X \rightarrow Y$

    حيث $X$ و$Y$ هما مجموعتان من السمات في العلاقة (الجدول). تعني هذه الرمزية أنه "X تحدد Y وظيفياً". إذا كانت قيم السمات في $X$ محددة، فإنها تحدد القيم المقابلة في $Y$.

  • أهمية الاعتماديات الوظيفية:
    • تحديد المفاتيح الأساسية (Primary Keys): تُساعد في اكتشاف المفاتيح المحتملة واختيار المفتاح الرئيسي.
    • تقليل التكرار (Reduce Redundancy): تُساعد في تحديد البيانات المتكررة التي يمكن فصلها إلى جداول منفصلة.
    • دعم التطبيع (Support Normalization): هي الأساس الذي تُبنى عليه الأشكال الطبيعية (Normal Forms) لضمان تصميم قاعدة بيانات جيد وخالٍ من حالات الشذوذ.
    • الحفاظ على سلامة البيانات (Maintain Data Integrity): من خلال تطبيق قواعد التطبيع المستندة إلى الاعتماديات الوظيفية، نضمن اتساق البيانات ودقتها.
مثال عملي: جدول الموظفين (Employees)

تخيل جدول Employees بالسمات التالية: EmployeeID, Name, DepartmentID, DepartmentName.

EmployeeID Name DepartmentID DepartmentName
101أحمدD01الموارد البشرية
102سارةD02التسويق
103فهدD01الموارد البشرية

الاعتماديات الوظيفية المحتملة هنا هي:

  • EmployeeID $\rightarrow$ Name (معرف الموظف يحدد اسمه بشكل فريد).
  • EmployeeID $\rightarrow$ DepartmentID (معرف الموظف يحدد قسمه).
  • DepartmentID $\rightarrow$ DepartmentName (معرف القسم يحدد اسم القسم بشكل فريد).

من هذه الاعتماديات، نستنتج أن EmployeeID هو المفتاح الرئيسي للجدول، وأن هناك اعتمادية متعدية (Transitive Dependency) حيث EmployeeID $\rightarrow$ DepartmentID و DepartmentID $\rightarrow$ DepartmentName، مما يعني EmployeeID $\rightarrow$ DepartmentName. هذه الاعتمادية المتعدية تشير إلى أن الجدول ليس في الشكل الطبيعي الثالث (3NF)، ويجب تطبيعه.

9.1.1 أنواع الاعتماديات الوظيفية (Types of Functional Dependencies)

لفهم أعمق، تُصنف الاعتماديات الوظيفية إلى عدة أنواع رئيسية:

  • 1. اعتمادية بسيطة (Simple Dependency):

    هي اعتمادية تعتمد على حقل واحد (سمة واحدة) لتحديد قيمة حقل آخر.

    مثال:
    • EmployeeID $\rightarrow$ Name (معرف الموظف يحدد اسم الموظف).
    • ProductID $\rightarrow$ ProductName (معرف المنتج يحدد اسم المنتج).
  • 2. اعتمادية مركبة (Composite Dependency):

    هي اعتمادية تعتمد على مجموعة من الحقول (أكثر من سمة واحدة) لتحديد قيمة حقل آخر. عادة ما يكون المُحدِّد هو مفتاح مركب.

    مثال: في جدول Enrollment (التسجيل) الذي يربط الطلاب بالمقررات:
    • (CourseID, StudentID) $\rightarrow$ Grade (معرف المقرر ومعرف الطالب معاً يحددان الدرجة التي حصل عليها الطالب في ذلك المقرر).
    • (OrderID, ProductID) $\rightarrow$ Quantity (رقم الطلب ومعرف المنتج يحددان الكمية المطلوبة من هذا المنتج في ذلك الطلب).
  • 3. اعتمادية جزئية (Partial Dependency):

    تحدث عندما يكون هناك جدول له مفتاح رئيسي مركب (Composite Primary Key)، وتعتمد سمة غير المفتاح الرئيسي على جزء فقط من هذا المفتاح المركب، وليس على المفتاح المركب بأكمله. هذه الاعتمادية تمنع الجدول من أن يكون في الشكل الطبيعي الثاني (2NF).

    مثال: تخيل جدول Project_Employee بالمفتاح المركب (ProjectID, EmployeeID)، والسمات: ProjectName، EmployeeName.
    • المفتاح المركب: (ProjectID, EmployeeID)
    • الاعتماديات:
      • (ProjectID, EmployeeID) $\rightarrow$ ProjectName (هذه صحيحة لكن ليست اعتمادية جزئية بحد ذاتها).
      • (ProjectID, EmployeeID) $\rightarrow$ EmployeeName (هذه صحيحة).
      • ولكن، إذا كانت ProjectID $\rightarrow$ ProjectName (أي ProjectName يعتمد فقط على ProjectID، وهو جزء من المفتاح المركب)، فهذه اعتمادية جزئية.

    مثال أكثر وضوحًا: في جدول Enrollment إذا كان المفتاح المركب (StudentID, CourseID)، وكانت السمة CourseName تعتمد فقط على CourseID (جزء من المفتاح المركب)، وليس على كل من StudentID وCourseID معًا، فهذه اعتمادية جزئية.

    • (StudentID, CourseID) (المفتاح الرئيسي المركب)
    • CourseID $\rightarrow$ CourseName (اعتمادية جزئية، لأن CourseName يعتمد على جزء من المفتاح الرئيسي).
  • 4. اعتمادية انتقالية (Transitive Dependency):

    تحدث عندما تكون هناك ثلاث سمات (أو مجموعات سمات) A, B, C في الجدول، بحيث:

    • $A \rightarrow B$ (A تُحدد B)
    • $B \rightarrow C$ (B تُحدد C)
    • ولكن $B$ ليست جزءًا من المفتاح الرئيسي ولا هي مفتاح بديل.
    في هذه الحالة، $A \rightarrow C$ تُعتبر اعتمادية انتقالية. هذه الاعتمادية تمنع الجدول من أن يكون في الشكل الطبيعي الثالث (3NF).

    مثال: في جدول Employee بالسمات EmployeeID, Name, DepartmentID, DepartmentName.
    • EmployeeID $\rightarrow$ DepartmentID (الموظف ينتمي لقسم).
    • DepartmentID $\rightarrow$ DepartmentName (رقم القسم يحدد اسم القسم).

    هنا، DepartmentID ليست مفتاحًا رئيسيًا للجدول Employee ولا هي مفتاح بديل له. لذلك، فإن العلاقة EmployeeID $\rightarrow$ DepartmentName هي اعتمادية انتقالية.

9.2 قواعد الاستدلال (Inference Rules)

تُعرف قواعد الاستدلال (Inference Rules) بأنها مجموعة من القواعد المنطقية التي تُمكننا من استخلاص جميع الاعتماديات الوظيفية الممكنة ضمن جدول معين، بناءً على مجموعة معروفة من الاعتماديات. هذه القواعد أساسية لتحليل العلاقات وتطبيق التطبيع.

أهم هذه القواعد هي بدهيات أرمسترونغ (Armstrong’s Axioms)، والتي تُعتبر كاملة (تستطيع توليد جميع الاعتماديات) وسليمة (لا تولد اعتماديات غير صحيحة):

  • 1. قاعدة الانعكاس (Reflexivity Rule):

    إذا كانت مجموعة السمات Y هي مجموعة فرعية من مجموعة السمات X (أي $Y \subseteq X$)، فإن X تُحدد Y وظيفياً. بعبارة أخرى، مجموعة من السمات دائمًا تحدد أيًا من سماتها الفرعية.

    الصيغة: إذا كانت $Y \subseteq X$، فإن $X \rightarrow Y$

    مثال: إذا كانت X = {EmployeeID, Name} و Y = {Name}، فإن {EmployeeID, Name} $\rightarrow$ Name. هذا منطقي؛ إذا عرفت كل من معرف الموظف واسمه، فإنك بالتأكيد تعرف اسمه.
  • 2. قاعدة التوسيع (Augmentation Rule):

    إذا كانت X تُحدد Y وظيفياً ($X \rightarrow Y$)، وأضفنا مجموعة سمات Z إلى كل من X وY، فإن XZ ستظل تُحدد YZ. بمعنى آخر، إضافة نفس السمات إلى طرفي الاعتمادية لا يُبطل صحتها.

    الصيغة: إذا $X \rightarrow Y$، فإن $XZ \rightarrow YZ$ لكل مجموعة $Z$

    مثال: إذا كان EmployeeID $\rightarrow$ Name.
    بإضافة DepartmentID (كـ Z)، فإن: {EmployeeID, DepartmentID} $\rightarrow$ {Name, DepartmentID}.
    إذا عرفت معرف الموظف وقسمه، فإنك تعرف اسمه وقسمه.
  • 3. قاعدة النقل (Transitivity Rule):

    إذا كانت X تُحدد Y وظيفياً ($X \rightarrow Y$)، وكانت Y تُحدد Z وظيفياً ($Y \rightarrow Z$)، فإن X تُحدد Z وظيفياً. هذا يُشبه الخاصية المتعدية في الرياضيات.

    الصيغة: إذا $X \rightarrow Y$ و$Y \rightarrow Z$، فإن $X \rightarrow Z$

    مثال تطبيقي:
    • إذا كان EmployeeID $\rightarrow$ DepartmentID (معرف الموظف يحدد معرف القسم الذي يعمل فيه).
    • وDepartmentID $\rightarrow$ DepartmentName (معرف القسم يحدد اسم القسم).

    إذن، يمكننا الاستدلال بأن EmployeeID $\rightarrow$ DepartmentName (معرف الموظف يحدد اسم القسم الذي يعمل فيه). هذه الاعتمادية المستنتجة هي مثال على الاعتمادية الانتقالية التي تحدثنا عنها سابقًا، وتشير إلى الحاجة إلى التطبيع.

ملاحظة: هناك قواعد استدلال إضافية يمكن اشتقاقها من بدهيات أرمسترونغ، مثل قاعدة الاتحاد (Union Rule)، وقاعدة التجزئة (Decomposition Rule)، وقاعدة الاغلاق (Closure Rule)، وغيرها، لكن هذه القواعد الثلاثة هي الأساس.

9.3 مخطط الاعتمادية (Dependency Diagram)

مخطط الاعتمادية (Dependency Diagram) هو تمثيل رسومي يُستخدم لتوضيح جميع الاعتماديات الوظيفية الموجودة بين السمات (الحقول) داخل جدول معين. يُعتبر أداة بصرية قوية لتحليل تصميم الجدول واكتشاف المشاكل المحتملة (مثل حالات الشذوذ) قبل تطبيق التطبيع.

  • تعريف:

    تمثيل رسومي يوضح الاعتماديات الوظيفية بين الحقول (السمات) داخل الجدول. يُرسم كل حقل كعقدة، وتُشير الأسهم من السمات المُحدِّدة إلى السمات المُعتمدة.

  • فوائد استخدام مخطط الاعتمادية:
    • تحديد المفاتيح الأساسية والثانوية: يُسهل تحديد السمات التي يمكن أن تعمل كمفاتيح.
    • تحليل الاعتماديات الجزئية والانتقالية: يساعد على رؤية العلاقات التي تُعيق وصول الجدول إلى الأشكال الطبيعية الأعلى، مما يُمكن من تحديد "أين يجب تقسيم الجدول".
    • تسهيل التطبيع: يُقدم خريطة طريق مرئية لعملية تحويل الجدول إلى الأشكال الطبيعية المطلوبة (1NF, 2NF, 3NF, إلخ) من خلال الإشارة إلى السمات التي يجب فصلها إلى جداول جديدة.
    • تحسين فهم البيانات: يُقدم نظرة واضحة على كيفية ترابط البيانات وتحديدها داخل الجدول، مما يعزز فهم المصمم والمستخدمين لهيكل البيانات.
مثال: مخطط اعتمادية لجدول Employee_Department (غير مُطبع)

لنأخذ جدول Employee_Department الذي يحتوي على: EmployeeID, Name, DepartmentID, DepartmentName.

  • الاعتماديات:
    • EmployeeID $\rightarrow$ Name
    • EmployeeID $\rightarrow$ DepartmentID
    • DepartmentID $\rightarrow$ DepartmentName

كيف يمكن رسمه (وصف نصي بدلاً من صورة):


[EmployeeID] ------> [Name]
    |
    |
    V
[DepartmentID] ----> [DepartmentName]
                        

شرح المخطط:

  • يشير السهم من `EmployeeID` إلى `Name` إلى اعتمادية بسيطة.
  • يشير السهم من `EmployeeID` إلى `DepartmentID` إلى اعتمادية بسيطة.
  • يشير السهم من `DepartmentID` إلى `DepartmentName` إلى اعتمادية بسيطة.
  • يمكنك ملاحظة الاعتمادية الانتقالية: EmployeeID $\rightarrow$ DepartmentID $\rightarrow$ DepartmentName. يوضح المخطط هذه السلسلة من الاعتماديات، مما يدل على أن DepartmentName لا يعتمد مباشرة على المفتاح الرئيسي EmployeeID، بل يعتمد عليه عبر DepartmentID. هذا يدعو إلى تطبيع الجدول وفصل معلومات القسم إلى جدول منفصل.

9.4 مصطلحات أساسية (Key Terms)

المصطلح (الإنجليزية) المصطلح (العربية) التعريف
Functional Dependency (FD) الاعتمادية الوظيفية علاقة بين مجموعتين من الحقول في الجدول بحيث تحدد مجموعة واحدة القيم في المجموعة الأخرى بشكل فريد.
Determinant المُحدِّد السمة أو مجموعة السمات في الجانب الأيسر من الاعتمادية الوظيفية (X في $X \rightarrow Y$).
Dependent المُعتمد السمة أو مجموعة السمات في الجانب الأيمن من الاعتمادية الوظيفية (Y في $X \rightarrow Y$).
Simple Dependency الاعتمادية البسيطة اعتمادية وظيفية يكون فيها المُحدِّد سمة واحدة فقط.
Composite Dependency الاعتمادية المركبة اعتمادية وظيفية يكون فيها المُحدِّد مجموعة من السمات (مفتاح مركب).
Partial Dependency الاعتمادية الجزئية اعتماد سمة غير رئيسية على جزء فقط من المفتاح الرئيسي المركب.
Transitive Dependency الاعتمادية الانتقالية اعتماد سمة غير رئيسية على سمة غير رئيسية أخرى (غير مفتاح) في نفس الجدول.
Inference Rules / Armstrong’s Axioms قواعد الاستدلال / بدهيات أرمسترونغ مجموعة من القواعد المنطقية لاستخلاص جميع الاعتماديات الوظيفية الممكنة من مجموعة معينة.
Reflexivity Rule قاعدة الانعكاس إذا كانت Y جزءًا من X، فإن X تحدد Y.
Augmentation Rule قاعدة التوسيع إذا كانت X تحدد Y، فإن XZ تحدد YZ.
Transitivity Rule قاعدة النقل إذا كانت X تحدد Y وY تحدد Z، فإن X تحدد Z.
Dependency Diagram مخطط الاعتمادية تمثيل رسومي يوضح الاعتماديات الوظيفية بين الحقول داخل الجدول.
Normalization التطبيع عملية تنظيم الجداول لتقليل التكرار وحالات الشذوذ بناءً على الاعتماديات الوظيفية.

ملخص الوحدة

  • الاعتماديات الوظيفية (FDs) هي علاقات تحدد فيها مجموعة سمات (المُحدِّد) قيم مجموعة أخرى (المُعتمد) بشكل فريد.
  • تُستخدم FDs لـ تحديد المفاتيح الأساسية، تقليل التكرار، ودعم عملية التطبيع.
  • الأنواع الرئيسية لـ FDs هي: بسيطة، مركبة، جزئية (تعتمد على جزء من المفتاح المركب)، وانتقالية (تعتمد على سمة غير رئيسية أخرى).
  • قواعد الاستدلال (بدهيات أرمسترونغ) تساعد على استخلاص جميع FDs الممكنة (الانعكاس، التوسيع، والنقل).
  • مخطط الاعتمادية هو أداة بصرية لتحليل FDs وتوجيه عملية التطبيع.

9.5 تمارين مقترحة (Suggested Exercises)

اختبر فهمك لمفاهيم هذه الوحدة بالإجابة على الأسئلة التالية:

  1. تخيل جدول Students_Courses_Grades الذي يحتوي على الحقول التالية: StudentID, StudentName, CourseID, CourseName, Instructor, Grade.
    حدد جميع الاعتماديات الوظيفية التي تعتقد أنها موجودة في هذا الجدول (بافتراض أن StudentID فريد للطلاب، CourseID فريد للمقررات، وأن لكل مقرر مدرس واحد).
  2. ارسم مخطط الاعتماديات للجدول المذكور في التمرين 1. بعد الرسم، حدد بوضوح أي اعتماديات جزئية و/أو اعتماديات انتقالية موجودة فيه.
  3. باستخدام قواعد أرمسترونغ للاستدلال (الانعكاس، التوسيع، النقل)، استنتج اعتمادية وظيفية جديدة من مجموعة الاعتماديات التالية:
    • A $\rightarrow$ B
    • B $\rightarrow$ C
    • D $\rightarrow$ E
    واشرح القاعدة التي استخدمتها للاستنتاج.
  4. لماذا تُعتبر الاعتماديات الوظيفية حاسمة لفهم عملية التطبيع (Normalization)؟ اشرح كيف تساعد على تحديد المشاكل التي تُعالجها الأشكال الطبيعية.
  5. ضع خطة عامة (ليست تفصيلا لكل خطوة، بل الخطوات الرئيسية) لتطبيع الجدول في التمرين 1 إلى الشكل الطبيعي الثالث (3NF) لتقليل التكرار وحالات الشذوذ.