SQLتعيين العمود كمفتاح أجنبي
- المفتاح الأجنبي ( Foreign Key )
- تجهيز قاعدة البيانات التي سنطبق عليها
- تعيين المفتاح الأجنبي عند إنشاء الجدول
- تعيين المفتاح الأجنبي بعد إنشاء الجدول
- حذف قيد المفتاح الأجنبي
المفتاح الأجنبي ( Foreign Key )
المفتاح الأجنبي هو العمود الذي نضع فيه قيم مفتاح رئيسي موجود في جدول آخر بهدف ربطهما مع بعض.
كمثال بسيط، في الصورة التالية العمود country_id الموجود في الجدول users يعتبر مفتاح أجنبي لأن قيمه تشير لقيم العمود id الموجود في الجدول countries.

نلاحظ أن قيم العمود country_id يجب أن تشير لقيم العمود id في الجدول countries لتخزين قيم صحيحة.
لضمان أن لا يتم تخزين أرقام خاطئة في العمود country_id يجب تعيين هذا العمود كمفتاح أجنبي بالنسبة للعمود id الموجود في الجدول countries. عندها في حال تمرير قيمة للحقل country_id غير موجودة في العمود id فإنه لن يتم قبولها و سيظهر خطأ مفاهده بأنه لا يمكن فعل ذلك.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash.
قواعد بيانات SQLite لا توجد ميزة المفاتيح الأجنبية فيها. و بالنسبة لقواعد بيانات Access فإنه يمكن التعامل فيها مع المفاتيح الأجنبية بشكل مباشر من خلال البرنامج نفسه.
تعيين المفتاح الأجنبي عند إنشاء الجدول
جميع الأعمدة التي سيتم تعيينها في الجدول بمثابة مفاتيح رئيسية ( Primary Key ) أو مفاتيح أجنبية ( Foreign Key ) يمكن تحديدها أثناء إنشاء الجدول أو في وقت لاحق. بالإضافة إلى ذلك فإنه يمكن تتكون من عمود واحد أو من أكثر من عمود.
في حال كان المراد تعيين عمود واحد أو أكثر كمفتاح أجنبي في الجدول فإنه يمكن وضع قيد ( Constraint ) لتحديده كما يلي.
- مكان الكلمة
constraint_name نضع الإسم الذي سيتم إعطاؤه للمفتاح.
- مكان الكلمة
column_names نضع إسم العمود أو الأعمدة التي ستمثل المفتاح.
المفتاح الرئيسي و المفاتيح الأجنبية في الجدول يمكن تعريفها كقيود فيه.
الإستعلام التالي ينشئ الجدولين users و countries مع تعيين جميع خصائصهما و مفاتيحهما.
تعيين المفتاح الأجنبي بعد إنشاء الجدول
في حال أردت تعيين عمود أو أكثر كمفتاح أجنبي في الجدول بعد أن تم إنشاؤه، يمكنك استخدام الأمر ADD CONSTRAINT لإضافة القيد كما يلي.
- مكان الكلمة
table_name نضع إسم الجدول الذي سيتم إنشاء القيد له.
- مكان الكلمة
constraint_name نضع الإسم الذي سيتم إعطاؤه للمفتاح.
- مكان الكلمة
column_names نضع إسم العمود أو الأعمدة التي ستمثل المفتاح.
- مكان الكلمة
referenced_table_name نضع إسم الجدول الآخر الذي يوجد فيه المفتاح الرئيسي.
- مكان الكلمة
referenced_column_names نضع إسم العمود أو الأعمدة التي تمثل المفتاح الرئيسي في الجدول الأخر.
الإستعلام التالي يضيف في الجدول users قيد إسمه fk_country_users مهمته تعيين العمود country_id الموجود في الجدول users كمفتاح أجنبي بالنسبة للعمود id الموجود في الجدول countries.
حذف قيد المفتاح الأجنبي
لحذف المفتاح الأجنبي الذي قمت بإضافته سابقاً كقيد في الجدول يمكنك استخدام الأمر ALTER كما يلي.
- مكان الكلمة
table_name نضع إسم الجدول الذي يحتوي على القيد.
- مكان الكلمة
constraint_name نضع إسم القيد الذي نريد حذفه.
الإستعلام التالي يقوم بحذف قيد المفتاح الأجنبي fk_country_user من الجدول users.