1- علي مستوي الحقل Column Level
يتم تعريف أي قيد به ماعدا:
§
المفتاح الأساسي المركبComposite
Primary Key
§
المفتاح الخارجي المركب Composite Foreign Key
وهذا طبيعي جدا لأن القيد في هذا المستوي يفرض علي الحقل
الذي يكتب أمامه القيد أما في تلك الحالات يحتوي القيد علي أكثر من حقل فلا يمكن
إتباع هذه الطريقة في عمل هذه القيود.
2- علي مستوي الجدول Table Level
يتم تعريف أي قيد به ماعدا قيد NOT NULL
قيد المفتاح الأساسى Primary Key Constraint
Column Level
|
Table Level
|
لاحظ
أن الفرق هنا لأننا نكتب الأوامر أخر الجدول فلابد أن نحدد من هو الحقل الذي سوف
يتم تنفيذ القيد عليه أما في الطريقة الأولي لم نكتب ذلك وهذا لأن القيد سوف ينفذ
علي الحقل المكتوب أمامه مباشرة.
قيد المفتاح الخارجي 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 لتمثيلها في أي المستويين علي سبيل المثال:
|
وللتحقق
من الـ 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
|
|
قيد التحقق من القيمةCHECK Constraint
Column Level
|
لاحظ
أهمية كتابة الشرط كاملا بعد كلمة 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 )
) ;