Database Relationship
১. One-to-One (1:1)
-- User + UserProfile
CREATE TABLE user_profiles (
user_id INT PRIMARY KEY,
bio TEXT,
avatar VARCHAR(255),
FOREIGN KEY (user_id) REFERENCES users(id)
);
২. One-to-Many (1:N) ⭐ সবচেয়ে সাধারণ
-- একজন user → অনেক post
CREATE TABLE posts (
id INT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(200),
FOREIGN KEY (user_id) REFERENCES users(id)
);
৩. Many-to-Many (N:M)
Junction/pivot table দরকার।
CREATE TABLE enrollments (
student_id INT,
course_id INT,
enrolled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
grade VARCHAR(2),
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
ERD (Entity Relationship Diagram)
users posts ┌────────┐ ┌────────┐ │ id PK │──────1:N─────│user_id │ │ name │ │ title │ └────────┘ └────────┘
Normalization
Data redundancy ও anomaly কমানোর প্রক্রিয়া। Table-কে ছোট অংশে ভাঙা হয়।
Un-normalized (ভুল)
orders ┌────┬─────────┬──────────┬───────────┐ │ id │user_name│user_email│ products │ ├────┼─────────┼──────────┼───────────┤ │ 1 │ করিম │ k@... │বই,কলম,খাতা│ └────┴─────────┴──────────┴───────────┘ ❌ user info পুনরাবৃত্তি ❌ products atomic নয়
1NF — প্রতিটি cell atomic
orders order_items (order_id) (order_id, product_id)
2NF — প্রতিটি non-key পুরো PK-এর উপর নির্ভর
-- ❌ order_items (order_id, product_id, product_name, price) -- product_name শুধু product_id-এর উপর -- ✅ order_items (order_id, product_id, quantity) products (id, name, price)
3NF — transitive dependency নেই
-- ❌ employees (id, name, dept_id, dept_name) -- dept_name → dept_id এর উপর নির্ভর -- ✅ employees (id, name, dept_id) departments (id, name)
Normalization কেন?
- Data redundancy কমায়
- Update anomaly এড়ায়
- Insert/Delete anomaly সমাধান