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
.