🔵 SQL (Relational)
Schema cố định, bảng có quan hệ, ACID transactions. PostgreSQL, MySQL, SQL Server.
🟢 NoSQL (Non-Relational)
Schema linh hoạt, nhiều mô hình (Document, Key-Value, Graph). MongoDB, Redis, Cassandra.
1. SQL Database
SQL (Structured Query Language) databases lưu dữ liệu trong các bảng (tables) với schema cố định. Các bảng có quan hệ với nhau qua foreign keys.
Đặc điểm:
- ACID: Atomicity, Consistency, Isolation, Durability — đảm bảo tính toàn vẹn
- Schema cố định: Mỗi bảng có cấu trúc xác định, data phải tuân theo
- Normalization: Tránh trùng lặp data bằng cách chia thành nhiều bảng
- JOIN: Truy vấn dữ liệu từ nhiều bảng cùng lúc
- Vertical scaling: Scale bằng nâng cấp hardware
-- SQL: Tạo bảng với schema cố định
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE TABLE orders (
id SERIAL PRIMARY KEY,
user_id INTEGER REFERENCES users(id),
total DECIMAL(10,2) NOT NULL,
status VARCHAR(20) DEFAULT 'pending'
);
-- JOIN: Lấy orders kèm thông tin user
SELECT u.name, o.total, o.status
FROM orders o
JOIN users u ON o.user_id = u.id
WHERE o.status = 'pending';
2. NoSQL Database
NoSQL databases không sử dụng cấu trúc bảng truyền thống. Có nhiều loại:
- Document (MongoDB): Lưu JSON/BSON documents
- Key-Value (Redis): Lưu cặp key-value đơn giản
- Wide-Column (Cassandra): Lưu theo column families
- Graph (Neo4j): Lưu nodes và relationships
// MongoDB: Document linh hoạt, không cần schema
// User 1 có address, User 2 không có — hoàn toàn OK
db.users.insertMany([
{
name: "Nguyễn Văn A",
email: "[email protected]",
address: { city: "HCM", district: "Q1" }, // nested document
skills: ["Node.js", "MongoDB"] // array
},
{
name: "Trần Thị B",
email: "[email protected]",
phone: "0901234567" // field khác hẳn user 1 — OK!
}
]);
// Embedded documents — không cần JOIN
db.orders.insertOne({
user: { name: "Nguyễn Văn A", email: "[email protected]" },
items: [
{ product: "iPhone 15", price: 25000000, qty: 1 },
{ product: "Case", price: 200000, qty: 2 }
],
total: 25400000,
status: "pending"
});
3. Bảng So Sánh
| Tiêu chí | 🔵 SQL | 🟢 NoSQL |
|---|---|---|
| Mô hình | Bảng (rows + columns) | Document, Key-Value, Graph |
| Schema | Cố định (strict) | Linh hoạt (flexible) |
| Transactions | ACID (mạnh) | BASE (eventual consistency) |
| Scaling | Vertical (nâng cấp server) | Horizontal (thêm server) |
| Relations | JOIN giữa bảng | Embedded / Denormalized |
| Query | SQL (chuẩn hóa) | API riêng từng loại |
| Ví dụ | PostgreSQL, MySQL, Oracle | MongoDB, Redis, Cassandra |
| Tốt cho | Finance, ERP, reporting | Real-time, big data, flexible schema |
4. Khi Nào Chọn?
Chọn SQL khi:
• Data có cấu trúc rõ ràng, quan hệ phức tạp
• Cần ACID transactions (banking, e-commerce)
• Cần JOIN, aggregate, reporting
• Team quen SQL
Chọn NoSQL khi:
• Schema thay đổi thường xuyên
• Cần horizontal scaling (millions users)
• Data dạng document (CMS, profiles)
• Real-time apps, IoT, gaming
💡 Xu hướng hiện đại: Nhiều công ty dùng cả hai (Polyglot Persistence). VD: PostgreSQL cho orders + payments, MongoDB cho product catalog, Redis cho cache + sessions.