১. Primary Key (PK) ⭐
প্রতিটি row-কে অনন্যভাবে চিহ্নিত করে। এক table-এ একটিই PK, NULL হতে পারবে না।
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
);
২. Foreign Key (FK)
এক table-এর column অন্য table-এর PK-কে নির্দেশ করে — সম্পর্ক তৈরি করে।
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
total DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
-- Referential Actions
-- CASCADE → parent পরিবর্তন/মুছলে child-ও
-- SET NULL → child-এর FK NULL হবে
-- RESTRICT → parent পরিবর্তন নিষিদ্ধ (default)
৩. Unique Key
ডুপ্লিকেট মান নয়, কিন্তু NULL থাকতে পারে। একাধিক Unique থাকতে পারে।
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(150) UNIQUE,
phone VARCHAR(20) UNIQUE
);
ALTER TABLE users ADD CONSTRAINT uq_email UNIQUE (email);
৪. Composite Key
একাধিক column মিলে PK/UK।
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (order_id) REFERENCES orders(id),
FOREIGN KEY (product_id) REFERENCES products(id)
);
৫. Candidate Key
যে column-গুলো অনন্যভাবে row চিহ্নিত করতে পারে। একটি PK হয়, বাকিগুলো Alternate Key।
Natural Key vs Surrogate Key
- Natural Key — বাস্তব জগতের মান (email, NID)
- Surrogate Key — system-generated (AUTO_INCREMENT) ⭐ সুপারিশকৃত
সম্পূর্ণ উদাহরণ
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) UNIQUE
);
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
category_id INT NOT NULL,
name VARCHAR(100) NOT NULL,
sku VARCHAR(20) UNIQUE,
price DECIMAL(10,2),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(150) UNIQUE,
username VARCHAR(50) UNIQUE
);
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
total DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES users(id)
);