আগের DDL lesson-এর CREATE TABLE উদাহরণ প্রতিটা row-কে uniquely identify করতে PRIMARY KEY ব্যবহার করেছে। আরো চারটা constraint নিজের data-তে নিয়ম প্রয়োগ করে — এগুলো ভাঙে এমন যেকোনো পরিবর্তন database প্রত্যাখ্যান করে, application check করবে বলে বিশ্বাস করার বদলে।
নিশ্চিত করে একটা column-এর মান অন্য একটা table-এ ইতিমধ্যে একটা primary key হিসেবে থাকতে হবে — সম্পর্কিত table-গুলোকে আসলে সংযুক্ত করা mechanism এটাই।
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
-- customers-এ customer_id 99 না থাকলে এই INSERT fail করে
INSERT INTO orders (id, customer_id) VALUES (1, 99);ON DELETE CASCADE)।Common Mistake
একটা foreign key ভুলে যাওয়া তাৎক্ষণিক error ঘটায় না — এটা চুপচাপ কিছুই reference না করা "orphaned" row অনুমতি দেয়, অনেক পরে confusing bug হিসেবে আবিষ্কৃত হয়।
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
-- দ্বিতীয় row-এ fail করে — email ইতিমধ্যে আছে
INSERT INTO users (id, email) VALUES (1, 'sam@example.com');
INSERT INTO users (id, email) VALUES (2, 'sam@example.com');CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(255) NOT NULL
);
-- Fail করে — email দরকারি
INSERT INTO users (id) VALUES (1);Common Mistake
কোনো NOT NULL constraint নেই এমন একটা column চুপচাপ NULL accept করে — "কেন এই field খালি" bug-এর একটা খুব common source যা application logic-এ না, একটা missing constraint-এ ফিরে যায়।
একটা column-এর মানে যেকোনো boolean শর্ত প্রয়োগ করে — সবচেয়ে flexible constraint।
CREATE TABLE products (
id INT PRIMARY KEY,
price DECIMAL(10,2) CHECK (price > 0),
quantity INT CHECK (quantity >= 0)
);
-- Fail করে — price positive হতে হবে
INSERT INTO products (id, price, quantity) VALUES (1, -10, 5);| Constraint | যা প্রয়োগ করে |
|---|---|
| PRIMARY KEY | প্রতিটা row uniquely identify করে, কখনো NULL না (আগের DDL lesson-এ কভার করা) |
| FOREIGN KEY | একটা মান অন্য একটা table-এ primary key হিসেবে থাকতে হবে |
| UNIQUE | কোনো দুটি row এই column-এ একই মান শেয়ার করে না |
| NOT NULL | একটা মান দরকারি — খালি রাখা যায় না |
| CHECK | মান-কে সন্তুষ্ট করতে হবে এমন একটা custom শর্ত |