আসলে FOREIGN KEY হল একটি কলাম বা কলামের সংমিশ্রণ যা দুটি টেবিলে ডেটার মধ্যে একটি লিঙ্ক সেট করতে ব্যবহার করা যেতে পারে। অন্য কথায়, আমরা বলতে পারি যে FOREIGN KEY সীমাবদ্ধতা দুটি টেবিলের সাথে সম্পর্কিত। এটি ডেটা অখণ্ডতা বাড়ানোর জন্যও ব্যবহৃত হয় কারণ একটি টেবিলের প্রাথমিক কী অন্যান্য টেবিলের বিদেশী কী-এর সাথে সংযুক্ত থাকে৷
সিনট্যাক্স
FOREIGN KEY [column_name] REFERENCES [table having Primary Key] ([column_name]);
এখানে REFERENCES একটি কীওয়ার্ড; column_name হল সেই কলামগুলির তালিকা যার উপর FOREIGN KEY সেট করতে হবে; প্রাইমারি কী সম্বলিত একটি টেবিল হল প্রাইমারি কী ধারণ করা টেবিলের নাম; column_name হল সেই কলামগুলির তালিকা যার উপর PRIMARY KEY সেট করা আছে।
উদাহরণ
ধরুন আমাদের দুটি টেবিল আছে 'গ্রাহক' এবং 'অর্ডার'। উভয় টেবিলের মধ্যে সম্পর্ক 'কাস্ট_আইডি' ফিল্ড দ্বারা নির্দিষ্ট করা টেবিলের 'অর্ডার'-এ একটি বিদেশী কী দ্বারা প্রতিষ্ঠিত হতে পারে। উভয় টেবিল তৈরি করার জন্য ক্যোয়ারী নিম্নরূপ -
mysql> Create Table Customer(Cust_ID int Primary Key, First_name Varchar(20), Last_name Varchar(20), City Varchar(10)); Query OK, 0 rows affected (0.13 sec) mysql> Create Table Orders(Order_Id Int Primary Key, Product_Name Varchar(25), Orderdate DATE, Cust_ID Int, FOREIGN KEY(Cust_ID) REFERENCES Customer(Cust_id)); Query OK, 0 rows affected (0.13 sec) mysql> Describe Orders; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | Order_Id | int(11) | NO | PRI | NULL | | | Product_Name | varchar(25) | YES | | NULL | | | Orderdate | date | YES | | NULL | | | Cust_ID | int(11) | YES | MUL | NULL | | +--------------+-------------+------+-----+---------+-------+ 4 rows in set (0.04 sec)
এখানে, টেবিল 'গ্রাহক' কে প্যারেন্ট টেবিল বা রেফারেন্স টেবিল এবং টেবিল 'অর্ডার' কে চাইল্ড টেবিল বা রেফারেন্সিং টেবিল বলা হয়। চাইল্ড টেবিলের একটি সারিতে অবশ্যই প্যারেন্ট টেবিলে বিদ্যমান মান থাকতে হবে। উদাহরণ স্বরূপ, টেবিল 'অর্ডার'-এর প্রতিটি সারিতে একটি 'কাস্ট_আইডি' থাকতে হবে যা 'গ্রাহক' টেবিলে বিদ্যমান।