الوحدة 7: قواعد السلامة وقيودها لضمان سلامة البيانات

تهدف هذه الوحدة إلى تعريف الطلاب بمفهوم سلامة البيانات (Data Integrity) في قواعد البيانات، وأنواع القيود المختلفة التي تضمن دقة وتناسق البيانات، بالإضافة إلى قواعد العمل والعلاقات بين الجداول.

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

تهدف هذه الوحدة إلى تعريف الطلاب بمفهوم سلامة البيانات (Data Integrity) في قواعد البيانات، وأنواع القيود المختلفة التي تضمن دقة وتناسق البيانات، بالإضافة إلى قواعد العمل والعلاقات بين الجداول.

7.1 سلامة النطاق (Domain Integrity)

تُعد سلامة النطاق أحد الأبعاد الأساسية لسلامة البيانات. إنها تُركّز على التأكد من أن كل قيمة تُدخل في عمود معين تقع ضمن مجموعة القيم المسموح بها لذلك العمود، والمعروفة باسم "نطاق" (Domain) العمود.

  • تعريف:

    سلامة النطاق هي التأكد من أن كل قيمة مدخلة في حقل ما تقع ضمن مجموعة القيم المسموح بها والمحددة مسبقًا لذلك الحقل.

  • أهمية:

    تمنع إدخال بيانات خاطئة، غير منطقية، أو غير متوافقة مع متطلبات العمل، مما يحافظ على جودة البيانات.

أمثلة:

  • حقل `Age` (العمر) يجب أن يحتوي على أرقام صحيحة بين 0 و120.
  • حقل `Gender` (الجنس) يجب أن يحتوي على "ذكر" أو "أنثى" فقط (أو قيم محددة أخرى مثل 'M', 'F').
  • حقل `GraduationDate` (تاريخ التخرج) يجب أن يكون بعد تاريخ الالتحاق بالجامعة (`EnrollmentDate`).
  • حقل `Salary` (الراتب) يجب أن يكون رقمًا موجبًا.

كيفية التطبيق في DBMS:

  • باستخدام نوع البيانات (Data Type): تحديد نوع البيانات الصحيح للعمود (مثل INT للأرقام، VARCHAR للنصوص، DATE للتواريخ) يضمن أن البيانات المدخلة من النوع الصحيح.
  • باستخدام القيود (Constraints):
    • CHECK Constraint: يُستخدم لفرض شرط معين على القيم في عمود.
      
      CREATE TABLE Employees (
          EmployeeID INT PRIMARY KEY,
          Age INT CHECK (Age >= 0 AND Age <= 120),
          Salary DECIMAL(10, 2) CHECK (Salary > 0)
      );
                                          
    • ENUM Type (في بعض قواعد البيانات مثل MySQL): يُحدد قائمة بقيم محددة يمكن للعمود أن يأخذها.
      
      CREATE TABLE Users (
          UserID INT PRIMARY KEY,
          UserName VARCHAR(100),
          Gender ENUM('Male', 'Female', 'Other')
      );
                                          

7.2 قيود المؤسسة (Enterprise Constraints)

تُعرف قيود المؤسسة أيضًا باسم "قيود التكامل الدلالي" (Semantic Integrity Constraints). هي قواعد تحدد الشروط والقيود التي تنطبق على جميع البيانات في المؤسسة لضمان تكامل المعلومات عبر الجداول المختلفة أو لفرض منطق عمل معقد.

  • تعريف:

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

  • أهمية:

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

أمثلة:

  • لا يمكن حذف قسم إذا كان يحتوي على موظفين حاليين مرتبطين به. (تكامل مرجعي مع سلوك "لا حذف متسلسل").
  • يجب أن يكون لكل طلب عميل مرتبط به وموجود في جدول العملاء. (تكامل مرجعي أساسي).
  • الحد الأقصى للراتب لأي موظف في قسم "المبيعات" لا يمكن أن يتجاوز 15,000 ريال. (يتطلب قواعد أو "مشغلات" [Triggers] أكثر تعقيدًا).
  • عدد الموظفين في كل قسم يجب أن لا يتجاوز 50 موظفًا.
تُعرف أحيانًا هذه القيود باسم قيود على مستوى الأعمال (Business-Level Constraints) لأنها تنظم سير العمليات التجارية وتُعد أساسًا لعمليات التحقق الأكثر تعقيدًا في قاعدة البيانات. يمكن تطبيقها باستخدام المفاتيح الخارجية، أو المشغلات (Triggers)، أو الإجراءات المخزنة (Stored Procedures).

7.3 قواعد العمل (Business Rules)

قواعد العمل هي تعليمات أو شروط تُحدد كيفية إدارة البيانات والعمليات داخل المنظمة. إنها تُمثل المنطق التشغيلي للشركة وتُترجم لاحقًا إلى قيود (Constraints) في تصميم قواعد البيانات لضمان أن النظام يعمل وفقًا لسياسات المؤسسة.

  • تعريف:

    قواعد تحدد الشروط والإجراءات التي يجب اتباعها في معالجة البيانات والعمليات داخل المنظمة لضمان التوافق مع سياسات الشركة ومتطلباتها التشغيلية.

أمثلة شائعة لقواعد العمل التي تُترجم إلى قيود قواعد بيانات:

  • "الموظف لا يمكنه العمل في أكثر من قسم في نفس الوقت."

    → يمكن ترجمة هذا إلى قيد يضمن أن عمود `DepartmentID` في جدول `Employees` يقبل قيمة واحدة فقط لكل موظف، أو أن يكون هناك مفتاح رئيسي مركب في جدول يربط الموظفين بالأقسام إذا كانت العلاقة M:N.

  • "كل طالب يجب أن يكون مسجلاً في مقرر واحد على الأقل."

    → يمكن تطبيق هذا باستخدام قيد `NOT NULL` على المفتاح الخارجي لـ `StudentID` في جدول التسجيل (إذا كانت علاقة 1:M)، أو باستخدام قواعد أكثر تعقيدًا (Triggers) لفرض أن الطالب لديه إدخال واحد على الأقل في جدول التسجيل.

  • "لا يمكن إدخال طلب بدون تحديد تاريخ الطلب والعميل."

    → يُترجم إلى قيود NOT NULL على حقلي `OrderDate` و`CustomerID` في جدول `Orders`، بالإضافة إلى قيد المفتاح الخارجي لـ `CustomerID` للتأكد من وجود العميل.

  • "العميل لا يمكنه تقديم طلب إذا كان رصيده مستحقًا."

    → يتطلب هذا عادةً منطقًا برمجيًا في التطبيق أو مشغلًا (Trigger) في قاعدة البيانات يتحقق من رصيد العميل قبل السماح بإدخال طلب جديد.

توضيح عملي:

قواعد العمل تُعد بمثابة الجسر بين متطلبات العمل الفعلية وتصميم قاعدة البيانات. تساعد على منع الأخطاء المنطقية عند معالجة البيانات، وهي أساس تصميم القيود (Constraints) في الجداول، سواء كانت بسيطة (مثل أنواع البيانات، NOT NULL) أو معقدة (مثل Triggers، Stored Procedures).

7.4 أنواع العلاقات (Types of Relationships)

تُعد العلاقات بين الكيانات جانبًا حيويًا في نمذجة البيانات العلائقية. إنها تُحدد كيف ترتبط البيانات في جدول واحد بالبيانات في جدول آخر، وتؤثر بشكل مباشر على سلامة البيانات وتكاملها.

  • 1. علاقة واحد إلى واحد (1:1 – One-to-One Relationship):

    في هذه العلاقة، كل سجل في جدول يرتبط بسجل واحد فقط في جدول آخر، والعكس صحيح. هذه العلاقة نادرة نسبيًا في التصميم الجيد لقواعد البيانات، وغالبًا ما تشير إلى أن الجدولين يمكن دمجهما في جدول واحد، ما لم يكن هناك سبب محدد للفصل (مثل: فصل البيانات الحساسة لأسباب أمنية، أو التعامل مع سمات اختيارية كثيرة).

    مثال:
    • كل `Employee` (موظف) له `Passport` (جواز سفر) واحد فقط، وكل جواز سفر يخص موظفًا واحدًا فقط.
    • كل `User` (مستخدم) في نظام ما قد يكون لديه `UserProfile` (ملف تعريف مستخدم) واحد فقط، وكل ملف تعريف يخص مستخدمًا واحدًا فقط.

    التطبيق: يمكن تحقيق ذلك بوضع المفتاح الرئيسي لجدول كـ مفتاح خارجي وفريد (UNIQUE FK) في الجدول الآخر.

  • 2. علاقة واحد إلى متعدد (1:M – One-to-Many Relationship):

    هي العلاقة الأكثر شيوعًا في قواعد البيانات العلائقية. في هذه العلاقة، كل سجل في الجدول الأول (الجدول "الواحد") يمكن أن يرتبط بسجل واحد أو أكثر في الجدول الثاني (الجدول "المتعدد")، ولكن كل سجل في الجدول الثاني يرتبط بسجل واحد فقط في الجدول الأول.

    مثال:
    • كل `Department` (قسم) يحتوي على `Employee` (عدة موظفين). ولكن كل موظف يعمل في قسم واحد فقط.
    • كل `Customer` (عميل) يمكن أن يقدم `Order` (عدة طلبات). ولكن كل طلب يتم تقديمه بواسطة عميل واحد فقط.

    التطبيق: تُنفذ هذه العلاقة بوضع المفتاح الرئيسي (PK) من الجدول "الواحد" (الأب) كـ مفتاح خارجي (FK) في الجدول "المتعدد" (الابن).

    
    -- جدول القسم (الجانب "الواحد")
    CREATE TABLE Departments (
        DepartmentID INT PRIMARY KEY,
        DepartmentName VARCHAR(100)
    );
    
    -- جدول الموظفين (الجانب "المتعدد")
    CREATE TABLE Employees (
        EmployeeID INT PRIMARY KEY,
        EmployeeName VARCHAR(100),
        DepartmentID INT,
        FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
    );
                                    
  • 3. علاقة متعدد إلى متعدد (M:N – Many-to-Many Relationship):

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

    مثال:
    • كل `Student` (طالب) يمكن أن يسجل في `Course` (عدة مقررات).
    • وكل `Course` (مقرر) يمكن أن يضم `Student` (عدة طلاب).

    التطبيق: تُنفذ هذه العلاقة في قواعد البيانات العلائقية باستخدام جدول وسيط (Junction Table / Associative Table). هذا الجدول الوسيط يحتوي على المفتاحين الرئيسيين (Primary Keys) من الجدولين المرتبطين كمفاتيح خارجية (Foreign Keys)، وكلاهما معًا يشكلان المفتاح الرئيسي المركب لهذا الجدول الوسيط. قد يحتوي الجدول الوسيط أيضًا على سمات إضافية خاصة بالعلاقة نفسها (مثل `EnrollmentDate` أو `Grade` في مثال الطالب والمقرر).

    
    -- جدول الطلاب
    CREATE TABLE Students (
        StudentID INT PRIMARY KEY,
        StudentName VARCHAR(100)
    );
    
    -- جدول المقررات
    CREATE TABLE Courses (
        CourseID VARCHAR(10) PRIMARY KEY,
        CourseName VARCHAR(100)
    );
    
    -- الجدول الوسيط للتسجيل (Enrollment)
    CREATE TABLE Enrollment (
        EnrollmentID INT PRIMARY KEY AUTO_INCREMENT, -- مفتاح فريد للتسجيل نفسه
        StudentID INT,
        CourseID VARCHAR(10),
        EnrollmentDate DATE,
        Grade CHAR(1),
        FOREIGN KEY (StudentID) REFERENCES Students(StudentID),
        FOREIGN KEY (CourseID) REFERENCES Courses(CourseID)
        -- يمكن أيضاً أن يكون المفتاح الرئيسي المركب هو (StudentID, CourseID)
        -- PRIMARY KEY (StudentID, CourseID)
    );
                                    

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

المصطلح (الإنجليزية) المصطلح (العربية) التعريف
Data Integrity سلامة البيانات ضمان دقة، صحة، وتناسق البيانات، وحمايتها من التلف أو التغيير غير المصرح به.
Domain Integrity سلامة النطاق التأكد من أن البيانات المدخلة في حقل ما تقع ضمن مجموعة القيم المسموح بها لذلك الحقل.
Constraint قيد قاعدة تُفرض على البيانات في قاعدة البيانات لضمان دقتها وتناسقها (مثل NOT NULL, UNIQUE, CHECK).
Enterprise Constraints قيود المؤسسة قواعد عامة تُفرض على مستوى المؤسسة لضمان تكامل المعلومات عبر الجداول المختلفة أو فرض منطق عمل معقد.
Business Rules قواعد العمل تعليمات أو شروط تحدد كيفية إدارة البيانات والعمليات داخل المنظمة، وتُترجم إلى قيود قواعد البيانات.
Relationship علاقة ارتباط منطقي بين جدولين أو أكثر في قاعدة البيانات.
One-to-One (1:1) علاقة واحد إلى واحد كل سجل في جدول يرتبط بسجل واحد فقط في جدول آخر.
One-to-Many (1:M) علاقة واحد إلى متعدد كل سجل في الجدول الأول يرتبط بسجل واحد أو أكثر في الجدول الثاني.
Many-to-Many (M:N) علاقة متعدد إلى متعدد كل سجل في الجدول الأول يرتبط بسجل واحد أو أكثر في الجدول الثاني، والعكس صحيح.
Junction Table / Associative Table جدول وسيط / ارتباطي جدول يُستخدم لتمثيل علاقة M:N بين جدولين، ويحتوي على المفاتيح الخارجية من الجدولين الرئيسيين.
Primary Key (PK) المفتاح الرئيسي عمود أو مجموعة أعمدة تميز كل سجل بشكل فريد.
Foreign Key (FK) المفتاح الخارجي عمود أو مجموعة أعمدة في جدول تشير إلى المفتاح الرئيسي في جدول آخر.
Referential Integrity التكامل المرجعي قاعدة تضمن أن قيم المفتاح الخارجي تتطابق مع قيم المفتاح الرئيسي المرتبط أو تكون NULL.

ملخص الوحدة

  • سلامة البيانات (Data Integrity) ضرورية لضمان جودة ودقة البيانات.
  • سلامة النطاق (Domain Integrity) تضمن أن البيانات المدخلة تقع ضمن النطاق المسموح به لكل حقل.
  • قيود المؤسسة (Enterprise Constraints) وقواعد العمل (Business Rules) تُترجم إلى قيود في قواعد البيانات لفرض منطق العمل.
  • أنواع العلاقات هي: واحد إلى واحد (1:1)، واحد إلى متعدد (1:M)، ومتعدد إلى متعدد (M:N). تُنفذ علاقة M:N باستخدام جدول وسيط.
  • المفاتيح الرئيسية والخارجية تلعب دورًا محوريًا في ضمان التكامل المرجعي للعلاقات.

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

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

  1. صمّم جدولًا باسم `Employees` (الموظفين) يحتوي على الحقول التالية: `EmployeeID` (رقم الموظف)، `Name` (الاسم)، `Age` (العمر)، `Gender` (الجنس)، `HireDate` (تاريخ التوظيف)، و`Salary` (الراتب). قم بتحديد قيود سلامة النطاق المناسبة لكل من حقول `Age`، و`Gender`، و`Salary`.
  2. اذكر مثالًا لـ قيد مؤسسة (Enterprise Constraint) يمكن تطبيقه في نظام تسجيل مدرسة أو بنك، واشرح بإيجاز كيفية تطبيقه باستخدام مفاهيم قواعد البيانات.
  3. صمّم علاقة "واحد إلى متعدد" (1:M) بين جدول `Departments` (الأقسام) وجدول `Employees` (الموظفين). وضح ما هو المفتاح الرئيسي في كل جدول وما هو المفتاح الخارجي المستخدم لربط العلاقة، واكتب جملة SQL بسيطة لإنشاء هذين الجدولين.
  4. اشرح لماذا لا يمكن تمثيل علاقة "متعدد إلى متعدد" (M:N) مباشرة في النموذج العلائقي. ثم صمّم جدول وسيط (Junction Table) لعلاقة M:N بين جدول `Students` (الطلاب) و`Projects` (المشاريع)، مع ذكر المفاتيح الرئيسية والخارجية لهذا الجدول الوسيط.
  5. اكتب قاعدة عمل (Business Rule) لضمان عدم إدخال طلب جديد في نظام المبيعات بدون تحديد عميل محدد وتاريخ للطلب. ثم اشرح كيف يمكن التحقق من صحة هذه القاعدة باستخدام قيود DBMS.