নিচের টিউটোরিয়ালে SQL Server-এ Set Null On Delete কনস্ট্রেইন্টসহ ফরেন কি (Foreign Key) ব্যাখ্যা করা হয়েছে।
SQL Server-এ Set NULL On Delete সহ ফরেন কি কী?
Set Null On Delete দিয়ে বাঁধা ফরেন কি মানে প্যারেন্ট টেবিলের একটি রেকর্ড ডিলিট হলে, চাইল্ড টেবিলের সংশ্লিষ্ট রেকর্ডের ফরেন কি ভ্যালু ফিল্ড NULL সেট হবে। চাইল্ড টেবিলে লেখা টেবিল SQL Server-এ ডিলিট হবে না।
ডিলিট হলে NULL মান সেট করার শর্তসহ ফরেন কি CREATE TABLE বা ALTER TABLE স্টেটমেন্ট দিয়ে তৈরি করা যায়।
CREATE TABLE স্টেটমেন্ট দিয়ে ডিলিট হলে NULL সেট করার কনস্ট্রেইন্টসহ ফরেন কি তৈরি করা
সিনট্যাক্স
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 SET NULL
[ 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
bang_con-এ ব্যবহৃত প্রাইমারি কি ধারণকারী প্যারেন্ট টেবিলের নাম।
cot_me1, cot_me2, ... cot_me_n
bang_me-এ প্রাইমারি কি গঠনকারী কলাম। ফরেন কি bang_con-এ cot_con1, cot_con2, ... cot_con_n কলামের সাথে ডেটায় কনস্ট্রেইন্ট তৈরি করবে।
ON DELETE SET NULL
প্যারেন্ট টেবিলের ডেটা ডিলিট হলে চাইল্ড টেবিলের ডেটা NULL সেট হবে। সাব-ডেটা ডিলিট হবে না।
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 সাথে ব্যবহার, প্যারেন্ট ডেটা ডিলিট বা আপডেট হলে চাইল্ড ডেটা ডিফল্ট ভ্যালু সেট হবে।
উদাহরণ
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, soluong INT, luong_toithieu INT, luong_toida INT, CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham) ON DELETE SET NULL );
এই উদাহরণে, আমরা প্যারেন্ট টেবিল sanpham তৈরি করেছি যার প্রাইমারি কি id_sanpham ইনফরমেশন ফিল্ড ধারণ করে। তারপর hangtonkho নামে একটি চাইল্ড টেবিল ডিলিশন কনস্ট্রেইন্টসহ ফরেন কি সহ। hangtonkho টেবিলে fk_htk_id_sanpham নামে ফরেন কি তৈরির CREATE TABLE স্টেটমেন্ট। ফরেন কি hangtonkho টেবিলের id_sanpham কলাম এবং sanpham টেবিলের id_sanpham-এর মধ্যে রিলেশন তৈরি করে।
এই ফরেন কিতে ON DELETE SET NULL নির্দিষ্ট করা হয়েছে যাতে SQL Server বুঝতে পারে প্যারেন্ট টেবিলের ডেটা ডিলিট হলে চাইল্ড টেবিলের সংশ্লিষ্ট রেকর্ডের মান NULL সেট করতে হবে। এই উদাহরণে, যখন id_sanpham টেবিল থেকে ডিলিট হবে, hangtonkho টেবিলের সংশ্লিষ্ট রেকর্ড যেটি id_sanpham ব্যবহার করে সেটি NULL সেট হবে।
মনে রাখতে হবে যেহেতু hangtonkho টেবিলের id_sanpham কলাম NULL সেট হবে, তাই নিশ্চিত করতে হবে এই কলাম NULL মান গ্রহণ করতে পারে। যদি CREATE TABLE-এ NOT NULL সেট করে দেওয়া থাকে, তবে নিচের এরর আসবে।
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) ON DELETE SET NULL ); Msg 1761, Level 16, State 0, Line 1 Cannot create the foreign key 'fk_htk_id_sanpham' with the SET NULL referential action, because one or more referencing columns are not nullable. Msg 1750, Level 16, State 0, Line 1 Could not create constraint or index. See previous errors.
নিশ্চিত করুন hangtonkho টেবিলের id_sanpham কলাম NULL মান গ্রহণ করতে পারে নিচের মত।
CREATE TABLE hangtonkho ( id_hangtonkho INT PRIMARY KEY, id_sanpham INT, soluong INT, luong_toithieu INT, luong_toida INT, CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham) ON DELETE SET NULL ); Command(s) completed successfully.
ALTER TABLE স্টেটমেন্ট দিয়ে ডিলিট হলে NULL সেট করার কনস্ট্রেইন্টসহ ফরেন কি তৈরি করা
সিনট্যাক্স
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) ON DELETE SET NULL;
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 কলামের সাথে ডেটায় কনস্ট্রেইন্ট তৈরি করবে।
ON DELETE SET NULL
প্যারেন্ট টেবিলের ডেটা ডিলিট হলে চাইল্ড ডেটা NULL ভ্যালু সেট হবে। চাইল্ড টেবিলের ডেটা ডিলিট হবে না।
উদাহরণ
ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham) ON DELETE SET NULL;
এই উদাহরণে, hangtonkho চাইল্ড টেবিল fk_htk_id_sanpham নামে ফরেন কি সহ তৈরি, প্যারেন্ট টেবিল sanpham কে id_sanpham বেসে রেফার করে।
ON DELETE SET NULL নির্দিষ্ট করা হয়েছে যাতে SQL Server বুঝতে পারে প্যারেন্ট টেবিলের id_sanpham ডেটা ডিলিট হলে hangtonkho চাইল্ড টেবিলের সংশ্লিষ্ট রেকর্ড NULL ভ্যালু সেট হবে।