• توجه: در صورتی که از کاربران قدیمی ایران انجمن هستید و امکان ورود به سایت را ندارید، میتوانید با آیدی altin_admin@ در تلگرام تماس حاصل نمایید.

SQL - محدودیت FOREIGN KEY

Reza

متخصص بخش اسکریپت
محدودیت foreign key در یک جدول به کلید اصلی یک جدول دیگر یا همان primary key در یک جدول دیگر اشاره دارد .​
بیاید برای درک بهتر به مثال زیر دیقت کنیم:​
جدول "person"​
P_Id LastName FirstName Address City 1 Hansen Ola Timoteivn 10 Sandnes 2 Svendson Tove Borgvn 23 Sandnes 3 Pettersen Kari Storgt 20 Stavanger
جدول "order"​
O_Id OrderNo P_Id 1 77895 3 2 44678 3 3 22456 2 4 24562 1
دقت کنید که عنصر P_Id درجدول order به عنصر همنام خود یعنی P_Id در جدول person اشره دارد و حاوی همان اطلاعات میباشد P_Id در order یک foreign key و در person یک |primary key میباشد.​
foreign key در واقع از وارد شدن اطلاعات نا معتبر در جدول و همچنین هرچیز که ارتباط بین دو جدول را تخریب کند جلوگیری میکند زیرا که به مقدار یکتایی در جدول اصلی اشاره دارد.​
ایجاد foreign key هنگام ساخت جدول

برای انجام عمل فوق از دستور زیر استفاده میکنیم​
MySQL:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
) SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

و برای محدود کردن چند ستون در جدول به عنوان foreign key از دستور زیر استفاده کنید​
MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

برای ساخت یک foreign key در جدولی که قبلا ساخته شده است باید از دستور زیر استفاده کرد.

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id) و همچنین برای ساخت چند ستون به عنوان یک foreign key از دستور زیر استفاده کنید

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
و برای حذف یک foreign key از دستورات زیر بهره بگیرید​
MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
 
بالا