SQL FOREIGN KEY Constraint

در SQL از FOREIGN KEY Constraint برای ایجاد ارتباط بین دو جدول استفاده می‌کنیم.
کلید خارجی مشخص می‌کنه که مقدار یک ستون (در جدول فرزند) باید با مقدار ستون کلید اصلی (در جدول والد) مطابقت داشته باشه.

🔹 مفهوم ساده

  • جدول اصلی (Parent Table) → شامل Primary Key است.

  • جدول فرزند (Child Table) → شامل Foreign Key است که به ستون جدول اصلی اشاره می‌کند.

🔹 ساختار کلی

CREATE TABLE child_table ( column_name datatype, FOREIGN KEY (column_name) REFERENCES parent_table(parent_column) );

🔹 مثال ساده

CREATE TABLE Departments ( DepartmentID INT PRIMARY KEY, DepartmentName VARCHAR(100) ); CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FullName VARCHAR(100), DepartmentID INT, FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) );

📌 توضیح:

  • جدول Departments شامل اطلاعات دپارتمان‌هاست.

  • جدول Employees شامل کارکنانه و ستون DepartmentID به جدول Departments اشاره می‌کنه.

  • یعنی هر کارمند باید به دپارتمانی تعلق داشته باشه که واقعاً در جدول Departments وجود داره.

🔹 درج داده معتبر

INSERT INTO Departments VALUES (1, 'HR'); INSERT INTO Employees VALUES (101, 'Ali Rezaei', 1);

✅ معتبره چون DepartmentID = 1 در جدول Departments وجود داره.

🔹 درج داده نامعتبر

INSERT INTO Employees VALUES (102, 'Sara Ahmadi', 5);

❌ خطا: مقدار 5 در جدول Departments وجود نداره، پس نقض کلید خارجی محسوب میشه.

🔹 افزودن FOREIGN KEY بعد از ساخت جدول

ALTER TABLE Employees ADD CONSTRAINT fk_Department FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID);

🔹 حذف FOREIGN KEY

ALTER TABLE Employees DROP CONSTRAINT fk_Department;

🔹 گزینه‌های حذف و به‌روزرسانی (ON DELETE / ON UPDATE)

می‌تونیم مشخص کنیم وقتی رکوردی از جدول والد حذف یا تغییر می‌کنه، در جدول فرزند چه اتفاقی بیفته:

CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, FullName VARCHAR(100), DepartmentID INT, FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID) ON DELETE CASCADE ON UPDATE CASCADE );

📌 توضیح:

  • ON DELETE CASCADE → اگر یک دپارتمان حذف شود، تمام کارکنان آن نیز حذف می‌شوند.

  • ON UPDATE CASCADE → اگر مقدار کلید اصلی تغییر کند، مقدار در جدول فرزند نیز به‌روز می‌شود.

🔹 نکات مهم

  • کلید خارجی به کلید اصلی یا UNIQUE در جدول دیگر اشاره می‌کنه.

  • هدفش حفظ یکپارچگی داده‌ها (Data Integrity) است.

  • می‌تونه از حذف یا درج داده‌های اشتباه جلوگیری کنه.

  • در SQL Server، MySQL و PostgreSQL به‌صورت مشابه کار می‌کنه.