در پایگاه دادههای رابطهای مانند MySQL، کلید خارجی (Foreign Key) برای ایجاد ارتباط بین جداول استفاده میشود.
این کلید باعث حفظ یکپارچگی دادهها شده و از ورود دادههای نامعتبر جلوگیری میکند. در این مقاله، نحوه ایجاد کلید خارجی در MySQL را به همراه مثالهای کاربردی بررسی میکنیم.
۱. تعریف کلید خارجی (Foreign Key) در MySQL
کلید خارجی یک فیلد در یک جدول فرزند است که به کلید اصلی (Primary Key) در یک جدول والد اشاره میکند. این رابطه تضمین میکند که مقادیر در جدول فرزند فقط میتوانند به مقادیر موجود در جدول والد اشاره داشته باشند.
مثال از ارتباط بین جداول:
فرض کنید دو جدول داریم:
- customers (مشتریان) → اطلاعات مشتریان را نگهداری میکند.
- orders (سفارشات) → اطلاعات سفارشات مشتریان را ذخیره میکند.
در اینجا، customer_id در جدول orders باید به customer_id در جدول customers بهعنوان کلید خارجی متصل شود.
۲. ایجاد کلید خارجی هنگام تعریف جدول
برای تعریف کلید خارجی در زمان ایجاد جدول، از دستور FOREIGN KEY استفاده میکنیم.
مثال: ایجاد کلید خارجی هنگام ساخت جدول
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
✅ در اینجا، ستون customer_id در جدول orders به ستون customer_id در جدول customers متصل شده است.
۳. افزودن کلید خارجی به جدول موجود
اگر جداول از قبل ساخته شده باشند، میتوان با استفاده از ALTER TABLE یک کلید خارجی به جدول اضافه کرد.
مثال: افزودن کلید خارجی به جدول orders بعد از ایجاد آن
ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(customer_id);
✅ در اینجا، customer_id در جدول orders به customer_id در جدول customers به عنوان یک کلید خارجی اضافه شده است.
۴. مدیریت حذف و بهروزرسانی دادهها در کلید خارجی
هنگام تعریف کلید خارجی، میتوان مشخص کرد که هنگام حذف یا بهروزرسانی دادههای مرتبط، چه اتفاقی بیفتد. این کار با استفاده از ON DELETE و ON UPDATE انجام میشود.
۴.۱. RESTRICT (محدود کردن حذف/ویرایش)
با این گزینه، اگر دادهای در جدول فرزند وجود داشته باشد، حذف یا تغییر مقدار کلید اصلی در جدول والد مجاز نیست.
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE RESTRICT
✅ اگر در جدول orders سفارشی برای مشتری ثبت شده باشد، حذف آن مشتری مجاز نخواهد بود.
۴.۲. CASCADE (حذف یا تغییر زنجیرهای)
با این گزینه، اگر یک مقدار در جدول والد حذف یا تغییر کند، تغییرات به طور اتوماتیک به جدول فرزند اعمال میشود.
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE CASCADE
✅ اگر مشتری حذف شود، تمام سفارشات مرتبط با او نیز حذف خواهند شد.
۴.۳. SET NULL (تنظیم مقدار NULL)
در این حالت، اگر مقدار کلید اصلی در جدول والد حذف شود، مقدار کلید خارجی در جدول فرزند NULL میشود.
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE SET NULL
✅ اگر مشتری حذف شود، مقدار customer_id در جدول orders برابر با NULL خواهد شد.
۴.۴. NO ACTION (بدون تغییر)
این گزینه مانند RESTRICT عمل میکند و اجازه حذف یا تغییر مقدار کلید اصلی را نمیدهد.
FOREIGN KEY (customer_id) REFERENCES customers(customer_id) ON DELETE NO ACTION
✅ حذف مشتری تنها در صورتی ممکن است که ابتدا سفارشات وابسته حذف شوند.
۵. حذف کلید خارجی در MySQL
اگر نیاز به حذف یک کلید خارجی داشته باشیم، میتوان از ALTER TABLE استفاده کرد.
۵.۱. پیدا کردن نام کلید خارجی
برای حذف کلید خارجی، ابتدا باید نام آن را پیدا کنیم. میتوان از دستور زیر استفاده کرد:
SHOW CREATE TABLE orders;
این دستور اطلاعات مربوط به جدول، از جمله کلیدهای خارجی را نمایش میدهد.
۵.۲. حذف کلید خارجی با ALTER TABLE
ALTER TABLE orders
DROP FOREIGN KEY fk_customer;
✅ در اینجا، fk_customer که نام کلید خارجی است، از جدول orders حذف شده است.
۶. مزایای استفاده از کلید خارجی در MySQL
مزیت | توضیح |
---|---|
حفظ یکپارچگی دادهها | مانع از ورود دادههای نامعتبر میشود. |
کاهش افزونگی دادهها | اطلاعات مشترک در جداول جداگانه ذخیره میشوند. |
افزایش کارایی جستجو و بازیابی دادهها | بازیابی دادههای مرتبط از چند جدول بهینهتر میشود. |
مدیریت بهتر حذف و بهروزرسانی دادهها | امکان حذف زنجیرهای یا تنظیم مقدار NULL را فراهم میکند. |
۷. نتیجهگیری
ایجاد کلید خارجی در MySQL یکی از اصول مهم در مدیریت پایگاه دادههای رابطهای است. این ویژگی به یکپارچگی دادهها کمک کرده، از ورود اطلاعات نامعتبر جلوگیری کرده و ارتباط بین جداول را مدیریت میکند. هنگام طراحی پایگاه داده، استفاده درست از کلیدهای خارجی میتواند باعث بهبود کارایی و کاهش خطاهای دادهای شود.