কম্পিউটার টিউটোরিয়াল

SQL Server-এ ফরেন কি (Foreign Key)

এই টিউটোরিয়ালে SQL Server-এ ফরেন কি (Foreign Key) ব্যবহারের পদ্ধতি সিনট্যাক্স ও উদাহরণ সহ পরিচয় করানো হয়েছে।

SQL Server-এ ফরেন কি কী?

ফরেন কি SQL Server ডেটাবেজে রেফারেন্স বজায় রাখতে ব্যবহৃত হয়। একটি ফরেন কি মানে এই টেবিলের মান অবশ্যই অন্য একটি টেবিলে উপস্থিত থাকতে হবে।

রেফারেন্স দেওয়া টেবিলকে প্যারেন্ট টেবিল (parent table) বলা হয়, আর ফরেন কি ধারণকারী টেবিলকে চাইল্ড টেবিল (child table) বলা হয়। চাইল্ড টেবিলের ফরেন কি সাধারণত প্যারেন্ট টেবিলের প্রাইমারি কি (PRIMARY KEY) রেফার করে।

ফরেন কি CREATE TABLE কমান্ড বা ALTER TABLE কমান্ড দিয়ে তৈরি করা যায়।

CREATE TABLE কমান্ড দিয়ে ফরেন কি তৈরি করা

সিনট্যাক্স

CREATE TABLE bang_con (
cot1 kieudulieu [ NULL | NOT NULL ],
cot2 kieudulieu [ NULL | NOT NULL ],
…
CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);

bang_con

তৈরি করতে চাওয়া চাইল্ড টেবিলের নাম।

cot1, cot2

টেবিলে তৈরি করতে চাওয়া কলাম। প্রতিটি কলামের ১টি ডেটা টাইপ, NULL বা NOT NULL মান নির্দিষ্ট করতে হবে, অন্যথায় ডিফল্ট NULL।

SQL Server-এ ডেটা টাইপ

fk_ten

তৈরি করতে চাওয়া ফরেন কি কনস্ট্রেইন্টের নাম।

cot_con1, cot_con2, ... cot_con_n

bang_con-এ যেসব কলাম bang_me-এ প্রাইমারি কি রেফার করতে চায়।

bang_me

ব্যাঙ_con-এ ব্যবহৃত প্রাইমারি কি ধারণকারী প্যারেন্ট টেবিলের নাম।

cot_me1, cot_me2, ... cot_me_n

bang_me-এ প্রাইমারি কি গঠনকারী কলাম। ফরেন কি bang_con-এ cot_con1, cot_con2, ... cot_con_n কলামের সাথে ডেটায় কনস্ট্রেইন্ট তৈরি করবে।

ON DELETE

ঐচ্ছিক। প্যারেন্ট ডেটা ডিলিট হলে চাইল্ড ডেটার সাথে কী হবে তা নির্দেশ করে। অপশন: NO ACTION, CASCADE, SET NULL, SET DEFAULT।

ON UPDATE

ঐচ্ছিক। প্যারেন্ট ডেটা আপডেট হলে চাইল্ড ডেটার সাথে কী হবে তা নির্দেশ করে। অপশন: NO ACTION, CASCADE, SET NULL, SET DEFAULT।

NO ACTION

ON DELETE বা ON UPDATE সাথে ব্যবহার, অর্থাৎ প্যারেন্ট ডেটা ডিলিট বা আপডেট হলে চাইল্ড ডেটার সাথে কিছুই করা হবে না।

CASCADE

ON DELETE বা ON UPDATE সাথে ব্যবহার, অর্থাৎ প্যারেন্ট ডেটা ডিলিট বা আপডেট হলে চাইল্ড ডেটাও ডিলিট বা আপডেট হবে।

SET NULL

ON DELETE বা ON UPDATE সাথে ব্যবহার, অর্থাৎ প্যারেন্ট ডেটা ডিলিট বা আপডেট হলে চাইল্ড ডেটা NULL সেট হবে।

SET DEFAULT

ON DELETE বা ON UPDATE সাথে ব্যবহার, অর্থাৎ প্যারেন্ট ডেটা ডিলিট বা আপডেট হলে চাইল্ড ডেটা ডিফল্ট ভ্যালু সেট হবে।

  1. SQL Server-এ ফরেন কি (Cascade Delete)
  2. SQL Server-এ ফরেন কি (Set Null)

উদাহরণ

CREATE TABLE sanpham (
id_sanpham INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
phan_loai VARCHAR(25)
);
CREATE TABLE hangtonkho (
id_hangtonkho INT PRIMARY KEY,
id_sanpham INT NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham)
REFERENCES sanpham (id_sanpham)
);

উপরের উদাহরণে, আমরা প্যারেন্ট টেবিল sanpham তৈরি করেছি যার প্রাইমারি কি id_sanpham ফিল্ড দিয়ে গঠিত। এরপর চাইল্ড টেবিল hangtonkho।

hangtonkho টেবিলের ফরেন কি তৈরির CREATE TABLE স্টেটমেন্টের নাম fk_htk_id_sanpham। ফরেন কি hangtonkho টেবিলের id_sanpham কলাম এবং sanpham টেবিলের id_sanpham-এর মধ্যে লিংক তৈরি করে।

উপরের উদাহরণ ১ কলাম দিয়ে ফরেন কি তৈরির পদ্ধতি দেখিয়েছে। এখন ১টির অধিক ইনফরমেশন ফিল্ড দিয়ে ফরেন কি তৈরি করি।

উদাহরণ

CREATE TABLE sanpham (
ten_sanpham VARCHAR(50) NOT NULL,
diadiem VARCHAR(50) NOT NULL,
phanloai VARCHAR(25),
CONSTRAINT sanpham_pk PRIMARY KEY (ten_sanpham, diadiem)
);
CREATE TABLE hangtonkho (
id_hangtonkho INT PRIMARY KEY,
ten_sanpham VARCHAR(50) NOT NULL,
diadiem VARCHAR(50) NOT NULL,
soluong INT,
luong_toithieu INT,
luong_toida INT,
CONSTRAINT fk_htk_sanpham FOREIGN KEY (ten_sanpham, diadiem)
REFERENCES sanpham (ten_sanpham, diadiem)
);

এই উদাহরণে, sanpham প্যারেন্ট টেবিলের দুই কলামের প্রাইমারি কি: ten_sanpham এবং diadiem। চাইল্ড টেবিল এবং ফরেন কি অবশ্যই এই দুটি কলাম রেফার করবে।

ALTER TABLE কমান্ড দিয়ে ফরেন কি তৈরি করা

সিনট্যাক্স

ALTER TABLE bang_con ADD CONSTRAINT fk_ten
FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)
REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n);

bang_con

তৈরি করতে চাওয়া চাইল্ড টেবিলের নাম।

fk_ten

তৈরি করতে চাওয়া ফরেন কি কনস্ট্রেইন্টের নাম।

cot_con1, cot_con2, ... cot_con_n

bang_con-এ যেসব কলাম bang_me-এ প্রাইমারি কি রেফার করতে চায়।

bang_me

bang_con-এ ব্যবহৃত প্রাইমারি কি ধারণকারী প্যারেন্ট টেবিলের নাম।

cot_me1, cot_me2, ... cot_me_n

bang_me-এ প্রাইমারি কি গঠনকারী কলাম। ফরেন কি bang_con-এ cot_con1, cot_con2, ... cot_con_n কলামের সাথে ডেটায় কনস্ট্রেইন্ট তৈরি করবে।

উদাহরণ

ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_id_sanpham
FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham);

এই উদাহরণ hangtonkho টেবিলে fk_htk_id_sanpham নামে ফরেন কি তৈরি করবে, sanpham টেবিলকে id_sanpham কলাম বেসে রেফার করে।

আপনি ১টির অধিক ফিল্ড দিয়ে ফরেন কি তৈরি করতে পারেন নিচের উদাহরণের মত।

ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_sanpham
FOREIGN KEY (ten_sanpham, diadiem) REFERENCES sanpham (ten_sanpham, diadiem);

উপরের উদাহরণ hangtonkho টেবিলের জন্য fk_htk_sanpham নামে ফরেন কি তৈরি করবে, sanpham টেবিলকে ten_sanpham এবং diadiem কলাম বেসে রেফার করে।

  1. RDBMS-এ ফরেন কী (Foreign Key) কী এবং কীভাবে কাজ করে

  2. SQL Server-এ GRANT/REVOKE পারমিশন (অনুমতি দেওয়া/ফেরত নেওয়া)

  3. SQL Server-এ PROCEDURE (প্রোসিজার/স্টোরড প্রোসিজার)

  4. SQL Server-এ PIVOT ক্লজ