المرجع السريع للغة SQL فى قاعدة بيانات MySQL


5- تحديد القيود على الجداول Defining Constraints
الأربعاء, 17 فبراير 2021

1-      علي مستوي الحقل Column Level

يتم تعريف أي قيد به ماعدا:

§         المفتاح الأساسي المركبComposite Primary Key

§         المفتاح الخارجي المركب                  Composite Foreign Key

 

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

 

2-      علي مستوي الجدول Table Level    

يتم تعريف أي قيد به ماعدا قيد NOT NULL   

 

قيد المفتاح الأساسى Primary Key Constraint

Column Level

DeptNo INT(4)   Primary Key,

Table Level


Primary Key (DeptNo),

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

 

قيد المفتاح الخارجي Foreign Key Constraint    

Column Level


Column Type REFERENCES parenttable (primarycolumn)

مثال:


DeptWorkINT(4) References Dept (DeptNo),

ولاحظ أن هذا القيد دائما يمثل علاقة مفتاح خارجى FK لمفتاح أساسى PK – وفى المثال السابق  - الحقل DeptWork عبارة عن مفتاح خارجى FK يشير إلى (References) حقل المفتاح الأساسى DeptNo لجدول Dept.

 

ولاحظ ان حقل المفتاح الخارجي يجب أن يشير لحقل مفتاح أساسى ولابد أن يكون من نفس نوع بيانات الحقل الأساسى ومن نفس الحجم Size إن وجد.

Table Level


FOREIGN KEY (column) REFERENCES parenttable (primarycolumn)

مثال آخر


Foreign Key (DeptWork)      References Dept ( DeptNo ),


في هذا الشكل يتضح لنا أهمية كتابة كلمة Foreign Key وذلك لتحديد المفتاح الخارجي في هذا الجدول الذي سوف يكون مرتبط بحقل مفتاح أساس في جدول أخر وبعد كلمة References نكتب أسم الجدول الآخر ثم أسم الحقل المفتاح الأساسى ويمكن إضافة Cascade Delete Related Fields بمعني عند حذف قيمة من المفتاح الأساسى يحذف تلقائيا كل البيانات المرتبطة به في الجدول المحتوي علي المفتاح الخارجي وهذا قد يمثل خسارة كبيرة وفقد بيانات هامة - يمكننا كتابة On Delete Cascade  لتمثيلها في أي المستويين علي سبيل المثال:


DeptWorkINT(4) References Dept (DeptNo) On Delete Cascade,

وللتحقق من الـ Referential Integrity أى أن البيانات فى Foreign Keyلابد أن يكون موجود مثيل لها فى الـ Primary Key لابد من كتابة TYPE = InnoDB بعد الإنتهاء من جملة Create Table وقبل الـ ; وبعد إغلاق القوس ) وفى نهاية الجملة.

قيد  NOT NULLNOTNULL Constraint

Column Level


Salary FLOAT(6,2) Not Null,

ولاحظ أنه لايمكن تعريف هذا القيد على مستوي الجدول.

 

قيد عدم التكرار UNIQUE Constraint

Column Level


DName  Varchar(25) UNIQUE,

  Table Level

UNIQUE ( DName ),


قيد التحقق من القيمةCHECK Constraint

Column Level


Gender Char(1) CHECK ( Gender IN ('M', 'm', 'F', 'f')  ),

لاحظ أهمية كتابة  الشرط كاملا بعد كلمة CHECK وبين أقواسها.

 

Table Level


            CHECK   ( Gender IN ('M', 'm', 'F', 'f')  ),

أمثلة لإنشاء الجداول بالطرق المختلفة.


CREATE TABLE EMPLOYEE

(

SSN          Char(4)        Primary Key  ,

Name        VARCHAR(60)      NOT NULL   ,

BirthDate   Date  ,

Salary        FLOAT(6,2)       ,

Street        VARCHAR(100)    ,

City            VARCHAR(25) Default 'Cairo'

) ;

 

CREATE TABLE FLIGHT

(

Flight_Number INT(2)          ,

Flight_Date      Date         ,

Passengers     INT(3)         ,

         Primary Key (Flight_Number ,Flight_Date )

) ;

 =======================

جميع حقوق نقل المعلومات مسموح بها لوجه الله. ولكن يرجى الإشارة لأسم الموقع فقط.