في لغة SQL، يُستخدم قيد `CHECK` لضمان أن القيم المُدخلة في عمود أو أكثر في الجدول تفي بشرط مُحدد. بمعنى آخر، يُحدد `CHECK` قيودًا على البيانات التي يُمكن إدخالها في الجدول، ويمنع إدخال أي قيم لا تتوافق مع هذه القيود. هذا يُساعد في الحفاظ على سلامة البيانات واتساقها في قاعدة البيانات.

**كيف يعمل قيد `CHECK`؟**

عند محاولة إدخال أو تحديث بيانات في جدول يحتوي على قيد `CHECK`، تتحقق قاعدة البيانات من الشرط المُحدد في القيد. إذا كان الشرط صحيحًا (true) بالنسبة للبيانات المُدخلة، يتم قبول العملية. أما إذا كان الشرط خاطئًا (false)، يتم رفض العملية وظهور خطأ يُشير إلى انتهاك قيد `CHECK`.

**صيغة قيد `CHECK`:**

يُمكن تعريف قيد `CHECK` عند إنشاء جدول (`CREATE TABLE`) أو تعديل جدول موجود (`ALTER TABLE`).

**عند إنشاء جدول:**

sql

CREATE TABLE table_name (

    column1 datatype,

    column2 datatype,

    CONSTRAINT constraint_name CHECK (condition)

**عند تعديل جدول موجود:**

sql

ALTER TABLE table_name

ADD CONSTRAINT constraint_name CHECK (condition);

*   `table_name`: اسم الجدول.

*   `column1`, `column2`: أسماء الأعمدة وأنواع بياناتها.

*   `constraint_name`: اسم اختياري للقيد. من المُستحسن إعطاء اسم للقيد لتسهيل إدارته لاحقًا (حذفه أو تعديله).

*   `condition`: الشرط الذي يجب أن تتحقق منه البيانات. يُمكن أن يكون الشرط تعبيرًا منطقيًا يستخدم عوامل المقارنة (`=`, `!=`, `>`, `<`, `>=`, `<=`)، والعوامل المنطقية (`AND`, `OR`, `NOT`).

**أمثلة على استخدام قيد `CHECK`:**

1.  **التحقق من نطاق القيم:**

```sql

CREATE TABLE Employees (

    ID INT PRIMARY KEY,

    Age INT,

    Salary DECIMAL,

    CONSTRAINT CK_EmployeeAge CHECK (Age >= 18 AND Age <= 65),

    CONSTRAINT CK_EmployeeSalary CHECK (Salary > 0)

);

في هذا المثال، تم تعريف قيدين:

*   `CK_EmployeeAge`: يضمن أن عمر الموظف يتراوح بين 18 و 65 عامًا.

*   `CK_EmployeeSalary`: يضمن أن راتب الموظف أكبر من صفر.

2.  **التحقق من قيم مُحددة:**

```sql

CREATE TABLE Orders (

    OrderID INT PRIMARY KEY,

    OrderStatus VARCHAR(20),

    CONSTRAINT CK_OrderStatus CHECK (OrderStatus IN ('Pending', 'Processing', 'Shipped', 'Delivered'))

);

هذا المثال يضمن أن قيمة عمود `OrderStatus` يجب أن تكون واحدة من القيم المُحددة في القائمة.

3.  **التحقق من علاقة بين أعمدة:**

sql

CREATE TABLE Products (

    ProductID INT PRIMARY KEY,

    Price DECIMAL,

    Discount DECIMAL,

    CONSTRAINT CK_DiscountCheck CHECK (Discount <= Price)

);

```


هذا المثال يضمن أن قيمة الخصم لا يُمكن أن تكون أكبر من سعر المنتج.

**حذف قيد `CHECK`:**

يُمكن حذف قيد `CHECK` باستخدام الأمر التالي:

```sql

ALTER TABLE table_name

DROP CONSTRAINT constraint_name;

**مزايا استخدام قيد `CHECK`:**

*   **سلامة البيانات:** يُساعد في الحفاظ على دقة البيانات ومنع إدخال قيم غير صحيحة.

*   **اتساق البيانات:** يُساعد في ضمان اتساق البيانات عبر الجدول.

*   **سهولة التطبيق:** سهل الاستخدام والتطبيق في تعريف الجداول وتعديلها.

*   **تحسين أداء الاستعلامات:** يُمكن أن يُساعد في تحسين أداء الاستعلامات من خلال تقليل الحاجة إلى التحقق من صحة البيانات في التطبيق.

باختصار، قيد `CHECK` أداة قوية في SQL لفرض قواعد مُحددة على البيانات المُدخلة في الجداول، مما يُساهم في الحفاظ على جودة البيانات وسلامتها.