کلیدهای خارجی در MySQL
کلیدهای خارجی در جدولهای پایگاه داده ابزاری هستند که سبب میشوند پیوستگی اطلاعات میان جداول بانک اطلاعاتی توسط DBMS بررسی و مدیریت شود. هرچند قرار دادن کلیدهای خارجی در جداول الزامی نیست، ولی وجود آنها در برخی مواقع میتواند سبب آسانشدن مدیریت پایگاه داده و پیشگیری از به وجود آمدن اشکال و خطا در ردیفهای وابستهی موجود در جدولهای گوناگون شوند.
مای اس کیو ال(MySQL) از چند گونه کلید خارجی پشتیبانی میکند که میتوان با مراجعه به بخش Relation View در phpMyAdmin یا بخش متناظر در نرمافزارهای دیگر، این کلیدها را ایجاد یا مدیریت نمود. MySQL تنها برای جدولهایی از نوع InnoDB از کلید خارجی پشتیبانی میکند.
مدیریت عملکرد کلیدهای خارجی در هنگام بهروزرسانی یا حذف ردیفها از جدول اصلی، به شیوههای مختلفی امکانپذیر است که میبایست توسط طراح پایگاه داده به صورت صریح مشخص شوند. در ادامه انواع کلیدهای خارجی در MySQL و عملکرد هر یک را مشاهده خواهید کرد.
CASCADE یا آبشاری
هنگامی که ردیفهای جدول اصلی حذف یا به روزرسانی شوند، ردیفهای متناظر در جدول متصل شده نیز حذف یا به روزرسانی میشوند. به این عمل، حذف آبشاری( Cascade ) گفته میشود.
برای مثال: اگر در جدول «استانها»، یک استان را حذف کنیم، تمامی شهرهای متصل به این استان در جدول «شهرها» نیز حذف خواهند شد.
RESTRICT یا محدود
نوع Restrict یا محدود، از حذف یا بهروزرسانی ردیفهای جدول اصلی در صورتی که پیوند خارجی به آن وجود داشته باشد جلوگیری میکند. بنابراین برای حذف یا به روزرسانی در این شیوه، ابتدا میبایست ردیفهای جدول ثانویه حذف یا بهروزرسانی شوند تا پیوند میان دو جدول از بین برود.
NO ACTION یا بی عمل
این گزینه تا حد زیادی با RESTRICT شباهت دارد. تفاوت اصلی میان NO ACTION و RESTRICT در زمان بررسی آنها است. NO ACTION بررسی کلیدهای خارجی را پس از تلاش برای به روزرسانی انجام میدهد. ولی RESTRICT این کار را قبل از تلاش برای تغییر یا حذف انجام میدهد. تفاوت در زمان اجرا ممکن است در برخی بهینهسازیها کاربرد داشته باشد.
SET NULL یا تنظیم به نال
با انتخاب این گزینه، چنانچه ردیفهای جدول اصلی بهروزرسانی یا حذف شوند، کلید خارجی در جدول ثانویه با مقدار NULL جایگزین میشود. لازم به ذکر است که ستون کلید خارجی باید NULLABLE باشد تا امکان انجام این کار فراهم شود.
برای مثال: اگر در جدول «استانها»، یک استان را حذف کنیم، فیلد «شناسهی استان» برای شهرهای مرتبط در جدول «شهرها» مساوی «NULL» خواهد شد.
SET DEFAULT یا تنظیم پیشفرض
این گزینه نیز با SET NULL شباهت زیادی دارد با این تفاوت که به جای مقدار NULL، مقدار پیشفرض فیلد در ستون کلید خارجی قرار خواهد گرفت.