مفاتيح الجداول
تستخدم المفاتيح بهدف الربط ما بين الجداول في قواعد البيانات.
المفتاح الأوليّ PRIMARY KEY
هو عمود (أو أكثر) من الجدول والذي يميّز السجلات عن بعضها، تكون القيم فيه فريدة (غير مكررة) ولا يمكن ألّا يحتوي قيمة (قيمته NULL)، ويكون للجدول مفتاح أولي وحيد.
المفتاح الثانويّ FOREIGN KEY
هو عمود (أو أكثر) من الجدول والذي يمكن عدّه مرجعيةً (reference) لعمود آخر في جدول ثانٍ (وغالبًا ما يكون هذا العمود هو المفتاح الأولي للجدول الثاني).
مثال
تحتوي قاعدة بيانات أحد المراكز التعليمية الجداول الآتية:
الجدول الأول: جدول الطلاب students
المفتاح الأولي فيه هو عمود StudentID
والمفتاح الثانوي هو عمود CourseID
للربط مع جدول الدورات التدريبية courses
RegDate | CourseID | LastName | FirstName | StudentID |
---|---|---|---|---|
07-JUL-2017 | 0206 | Najjar | Rama | 1147 |
08-NOV-2017 | 0604 | Kordi | Jenan | 1148 |
07-JUL-2017 | 0206 | Bitar | Rahaf | 1149 |
20-AUG-2017 | 0607 | Taweel | Farah | 1150 |
08-NOV-2017 | 0610 | Arab | Rami | 1151 |
24-OCT-2017 | 0803 | Akkad | Aya | 1152 |
08-NOV-2017 | 0504 | Haddad | Abed | 1153 |
20-AUG-2017 | 0801 | Fares | Tasneem | 1154 |
24-OCT-2017 | 0607 | Hamsho | Monther | 1155 |
30-SEP-2017 | 0607 | Abd Allah | Hiba | 1156 |
07-JUL-2017 | 0509 | Khatib | Mohammad | 1157 |
20-AUG-2017 | 0801 | Sharif | Ibrahim | 1158 |
24-OCT-2017 | 0802 | Fehmi | Hanin | 1159 |
20-AUG-2017 | 0204 | Zein | Loujain | 1160 |
08-NOV-2017 | 0503 | Helali | Ammar | 1161 |
الجدول الثاني: جدول الدورات التدريبية courses
المفتاح الأولي فيه هو عمود CourseID
والمفتاح الثانوي هو عمود DepartmentID
للربط مع جدول الأقسام departments
DepartmentID | Lecturer | Course | CourseID |
---|---|---|---|
EN01 | Dr. Reem Hadi | English (Adv) | 0204 |
EN01 | Dr. Shadi Balid | English (Int) | 0206 |
EN02 | Dr. Firas Abd | English (TOEFL) | 0211 |
IT01 | Eng. Nasser Sharif | Artificial Intelligence | 0604 |
IT01 | Eng. Amal Safi | Networks | 0607 |
IT01 | Eng. Salem Najm | ICDL | 0610 |
IT02 | Eng. Nasser Sharif | SQL Programming | 0703 |
IT02 | Eng. Amal Safi | FrontEnd Programming | 0704 |
IT03 | Mr. Maher Siraj | Photoshop Design | 0801 |
IT03 | Ms. Nadia Taleb | Illustrator Design | 0802 |
IT03 | Mr. Maher Siraj | UI Design | 0803 |
الجدول الثالث: جدول الأقسام departments
المفتاح الأولي فيه هو DepartmentID وبقاعدة البيانات في هذا المثال لا توجد مرجعية له لربطه مع جدول آخر.
Head | DepatementName | DepartmentID |
---|---|---|
Dr. Firas Abd | General English | EN01 |
Dr. Saer Raslan | Advanced English | EN02 |
Dr. Osama Najjar | Information Technology | IT01 |
Eng. Amal Safi | Programming | IT02 |
Eng. Fares Ahmad | Graphic Design | IT03 |
تعيين قيود المفاتيح الأولية والثانوية لأعمدة الجدول
تعيين أعمدة المفاتيح لجدول جديد
لتعيين قيود المفاتيح الأوليّة والثانويّة تضاف العبارة المفتاحية PRIMARY KEY
و FOREIGN KEY
في تعليمة إنشاء الجدول CREATE TABLE
.
مثال
لإضافة المفاتيح على الجدول السابق students
، يصبح الاستعلام بالشكل الآتي:
CREATE TABLE students(
StudentID INTEGER NOT NULL,
LastName TEXT,
FirstName TEXT,
CourseID INTEGER,
RegDate DATE,
PRIMARY KEY (StudentID),
FOREIGN KEY (CourseID) REFERENCES courses (CourseID)
);
أما عندما يكون هناك أكثر من عمود للمفتاح فتُضاف كافة الأعمدة المطلوبة ضمن القوسين بجانب الكلمة المفتاحية لتصبح بالشكل:
PRIMARY KEY (StudentID, FirstName)
تعيين أعمدة المفاتيح لجدول موجود
يُمكن تعيين أعمدة المفاتيح لجدول موجود مسبقًا من خلال الكلمة المفتاحية ADD
في تعليمة تعديل الجدول ALTER TABLE
ليصبح استعلام إضافة المفتاح الأوليّ بالشكل الآتي:
ALTER TABLE tbl_name
ADD PRIMARY KEY (col_name);
وإضافة المفتاح الثانوي بالشكل:
ALTER TABLE tbl_name
ADD FOREIGN KEY (col_name) REFERENCES tbl_name2 (col_name2);
مثال
لإضافة المفتاحين الأوليّ والثانويّ للجدول السابق students
يُستخدَم الاستعلام الآتي:
ALTER TABLE students
ADD PRIMARY KEY (StudentID)
ADD FOREIGN KEY (CourseID) REFERENCES courses (CourseID);
حذف قيود المفاتيح من الجدول
يُمكن حذف قيود المفاتيح لجدول موجود مسبقًا من خلال الكلمة المفتاحية DROP
في تعليمة تعديل الجدول ALTER TABLE
ليصبح الاستعلام عند حذف المفتاح الأوليّ بالشكل الآتي:
ALTER TABLE students
DROP PRIMARY KEY;
وحذف مفتاح الثانوي بالشكل:
ALTER TABLE students
DROP FOREIGN KEY;
التوافقية
SQLServer | SQLite | Oracle | PostgreSQL | MySQL |
---|---|---|---|---|
نعم | نعم | نعم | نعم | نعم |