کلید خارجی (Foreign Key)
اینجا درباره کلید خارجی حرف می زنیم. «کلید خارجی (Foreign Key)» یعنی ستونی که به «کلید اصلی (Primary Key)» جدول دیگر اشاره می کند. این اتصال نظم می آورد و جلوی داده اشتباه را می گیرد. مثل آی دی دانش آموز در جدول نمرات که حتماً باید در جدول دانش آموزان وجود داشته باشد.
کلید خارجی چیست؟
«کلید خارجی (Foreign Key)» فیلدی در جدول فرزند است که به «کلید اصلی» جدول والد اشاره می کند. اگر مقدارش در والد نباشد، ذخیره نمی شود. پس ارتباط ها سالم می مانند.
نکته: جدول دارای کلید خارجی را «فرزند» می گوییم و جدول دارای کلید اصلی را «والد» می نامیم.
ساخت کلید خارجی هنگام ساخت جدول
در مثال زیر، ستون PersonID در جدول Orders به PersonID در جدول Persons اشاره می کند. اولی فرزند است، دومی والد.
MySQL
CREATE TABLE Orders
(
OrderID int NOT NULL;
OrderNumber int NOT NULL;
PersonID int;
PRIMARY KEY (OrderID);
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
);
SQL Server / Oracle / MS Access
CREATE TABLE Orders
(
OrderID int NOT NULL PRIMARY KEY;
OrderNumber int NOT NULL;
PersonID int FOREIGN KEY REFERENCES Persons(PersonID);
);
نام گذاری محدودیت و چندستونی
CREATE TABLE Orders
(
OrderID int NOT NULL;
OrderNumber int NOT NULL;
PersonID int;
PRIMARY KEY (OrderID);
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
);
هشدار: نوع داده و سازگاری ستون ها باید منطقی باشد. مثلاً هر دو int باشند.
افزودن کلید خارجی با ALTER TABLE
اگر جدول ساخته شده است، با دستور زیر کلید خارجی اضافه می شود.
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
برای نام گذاری محدودیت نیز می توانید از CONSTRAINT استفاده کنید.
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
حذف کلید خارجی
برای حذف، باید نام محدودیت را داشته باشید. نام ها در ابزار مدیریت دیتابیس دیده می شوند.
MySQL
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
SQL Server / Oracle / MS Access
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
تمرین گام به گام
- جدول والد Persons را با کلید اصلی بساز.
- جدول فرزند Orders را با PersonID بساز.
- کلید خارجی را طبق نمونه بالا اضافه کن.
- سعی کن PersonID نامعتبر وارد کنی و نتیجه را ببین.
نکته: برای درک بهتر رابطه ها، صفحه کلید اصلی را هم بخوان.
جمع بندی سریع
- کلید خارجی، نگهبان ارتباط جدول هاست.
- باید به کلید اصلی والد اشاره کند.
- می توان هنگام ساخت یا با ALTER افزود.
- برای حذف، نام محدودیت لازم است.
- از نوع داده سازگار استفاده کن.