SQLتعيين العمود كمفتاح أجنبي
- المفتاح الأجنبي ( Foreign Key )
- تعيين المفتاح الرئيسي و المفتاح الأجنبي عند إنشاء الجدول
- تعيين المفتاح الأجنبي بعد إنشاء الجدول
- حذف قيد المفتاح الأجنبي
المفتاح الأجنبي ( Foreign Key )
المفتاح الأجنبي هو العمود الذي نضع فيه قيم مفتاح رئيسي موجود في جدول آخر بهدف ربطهما مع بعض.
فمثلاً في الجدول users
, العمود country_id
يعتبر مفتاح أجنبي لأن قيمه تشير لقيم العمود id
في الجدول countries
.
نلاحظ أن قيم العمود country_id
يجب أن تشير لقيم العمود id
في الجدول countries
لتخزين قيم صحيحة.
لضمان أن لا يتم تخزين أرقام خاطئة في العمود country_id
يجب تعيين هذا العمود كمفتاح أجنبي بالنسبة للعمود id
الموجود في الجدول countries
.
عندها في حال تمرير قيمة للحقل country_id
غير موجودة في الجدول countries
, لن يتم قبولها و سيظهر لك خطأ يخبرك أنه لا يمكنك ذلك.
تعيين المفتاح الرئيسي و المفتاح الأجنبي عند إنشاء الجدول
في الدرس السابق شاهدنا أنه يوجد طريقتين لتحديد المفتاح الرئيسي, الأولى يمكن استخدامها في حال كان المفتاح الرئيسي عبارة عن عمود واحد, و الثانية إستخدامها إجباري في حال كان المفتاح الرئيسي يتكون من أكثر من عامود.
المفتاح الأجنبي كذلك الأمر, حيث يمكن تعيين واحد أو أكثر كمفتاح أجنبي في الجدول.
لتعيين عمود واحد أو أكثر كمفتاح أجنبي في الجدول, يمكننا وضع قيد ( CONSTRAINT ) لتحديده.
هذه الطريقة متاحة في جميع قواعد البيانات و استخدامها سهل لأننا نقوم بتعريف الأعمدة و في النهاية نحدد مفاتيح الجدول.
المميز في هذه الطريقة, أنك في حال قررت إلغاء المفتاح الأجنبي لاحقاً, يمكنك فعل ذلك بكل سهولة لأنك ستعتمد على إسم القيد الذي وضعته بنفسك من أجل إلغائه.
مثال
تعيين المفاتيح في قواعد بيانات MySQL
يمكنك اتباع الطريقة التالية لتعريف المفاتيح مع الإشارة إلى أنه يفضل وضع قيد بشكل يدوي لأن التعامل معه مستقبلاً سيكون أسهل عليك إن أردت ذلك.
مثال
تعيين المفاتيح في قواعد بيانات SQL Server / Oracle / Access
يمكنك اتباع الطريقة التالية لتعريف المفاتيح مع الإشارة إلى أنه يفضل وضع قيد بشكل يدوي لأن التعامل معه مستقبلاً سيكون أسهل عليك إن أردت ذلك.
مثال
تعيين المفتاح الأجنبي بعد إنشاء الجدول
في حال كنت تنوي تعيين عمود واحد كمفتاح أجنبي, يمكنك استخدام الأمر ALTER لتعيينه.
في حال كنت تنوي تعيين أكثر من عمود كمفتاح أجنبي, يجب إضافة CONSTRAINT لتعيينه.
ملاحظة: إضافة CONSTRAINT أمر يحتاج كتابة إستعلام أطول قليلاً و لكن التعامل معه مستقبلاً سيكون أسهل عليك إن أردت ذلك.
المثال الأول
الإستعلام التالي يقوم بتعيين العمود country_id
الموجود في الجدول users
كمفتاح أجنبي بالنسبة للعمود id
الموجود في الجدول countries
.
الإستعلام
المثال الثاني
الإستعلام التالي يقوم بتعيين العمود country_id
الموجود في الجدول users
كمفتاح أجنبي بالنسبة للعمود id
الموجود في الجدول countries
.
الإستعلام
حذف قيد المفتاح الأجنبي
طريقة إلغاء قيد ( CONSTRAINT ) المفتاح الأجنبي الذي قمت بتعيينه سابقاً, تختلف من قاعدة بيانات لأخرى.
في قواعد بيانات MySQL
الإستعلام التالي يقوم بإلغاء قيد مفتاح أجنبي إسمه fk_country_user
إفترضنا أنه موضوع في الجدول users
.
مثال
في قواعد بيانات SQL Server / Oracle / Access
الإستعلام التالي يقوم بإلغاء قيد مفتاح أجنبي إسمه fk_country_user
إفترضنا أنه موضوع في الجدول users
.