[Java Backend Zero to Hello] BÀI 4.1: CƠ SỞ DỮ LIỆU QUAN HỆ
📚 Bài viết thuộc series Java Backend Zero to Hello 📌 Phần: Phase 4: Database & SQL | Bài 36/86
BÀI 4.1: CƠ SỞ DỮ LIỆU QUAN HỆ
Mục tiêu
- Hiểu khái niệm RDBMS
- Nắm tính chất ACID
- Hiểu về Normalization
- Phân biệt các loại Database
1. DATABASE LÀ GÌ?
Database (Cơ sở dữ liệu) là tập hợp dữ liệu có tổ chức, được lưu trữ và quản lý để dễ dàng truy cập, thao tác.
DBMS vs RDBMS
| DBMS | RDBMS |
|---|---|
| Database Management System | Relational DBMS |
| Lưu dữ liệu dạng bất kỳ | Lưu dữ liệu dạng bảng có quan hệ |
| Có thể không có quan hệ | Có quan hệ giữa các bảng |
| Ví dụ: MongoDB | Ví dụ: MySQL, PostgreSQL |
2. RDBMS PHỔ BIẾN
| Database | Đặc điểm |
|---|---|
| MySQL | Phổ biến, miễn phí, dễ dùng |
| PostgreSQL | Mạnh mẽ, hỗ trợ JSON, advanced features |
| Oracle | Enterprise, trả phí |
| SQL Server | Microsoft, tích hợp .NET |
| SQLite | Nhẹ, embedded |
3. CÁC KHÁI NIỆM CƠ BẢN
3.1 Bảng (Table)
users
+----+----------+-----------------+-----+
| id | name | email | age |
+----+----------+-----------------+-----+
| 1 | An | an@example.com | 25 |
| 2 | Bình | binh@example.com| 30 |
+----+----------+-----------------+-----+
- Row/Record/Tuple: Một bản ghi
- Column/Field/Attribute: Một thuộc tính
- Primary Key: Cột định danh duy nhất
- Foreign Key: Tham chiếu đến bảng khác
3.2 Schema
Cấu trúc của database: các bảng, cột, kiểu dữ liệu, quan hệ.
3.3 Quan hệ (Relationship)
- One-to-One: User - Profile
- One-to-Many: User - Orders
- Many-to-Many: Students - Courses (qua bảng trung gian)
4. TÍNH CHẤT ACID
| Tính chất | Mô tả |
|---|---|
| Atomicity | Tất cả hoặc không có gì - transaction thành công hoàn toàn hoặc rollback |
| Consistency | Dữ liệu luôn ở trạng thái hợp lệ |
| Isolation | Các transaction không ảnh hưởng lẫn nhau |
| Durability | Dữ liệu đã commit không bị mất |
Ví dụ Transaction
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- Nếu lỗi: ROLLBACK;
5. NORMALIZATION (CHUẨN HÓA)
Quy trình tổ chức bảng để giảm redundancy và đảm bảo integrity.
5.1 First Normal Form (1NF)
- Mỗi cột chứa giá trị nguyên tử (không chia nhỏ được)
- Không có nhóm lặp lại
❌ Vi phạm:
| id | name | phones |
| 1 | An | 0901, 0902 |
✅ Tuân thủ:
| id | name | phone |
| 1 | An | 0901 |
| 1 | An | 0902 |
5.2 Second Normal Form (2NF)
- Đạt 1NF
- Mọi cột non-key phụ thuộc đầy đủ vào Primary Key
5.3 Third Normal Form (3NF)
- Đạt 2NF
- Không có transitive dependency (cột non-key không phụ thuộc vào cột non-key khác)
❌ Vi phạm:
| id | name | department | dept_head |
✅ Tuân thủ:
employees: departments:
| id | name | dept_id | | id | name | head |
6. INDEX
Cấu trúc dữ liệu giúp tăng tốc truy vấn.
6.1 Các loại Index
- Primary Key Index: Tự động tạo
- Unique Index: Đảm bảo giá trị duy nhất
- Composite Index: Index trên nhiều cột
- Full-text Index: Tìm kiếm văn bản
6.2 Khi nào dùng
- ✅ Cột thường dùng trong WHERE, JOIN
- ✅ Cột có nhiều giá trị trùng (low cardinality)
- ❌ Bảng nhỏ
- ❌ Cột thường xuyên UPDATE
7. CAP THEOREM
Trong distributed database:
- Consistency: Tất cả node thấy cùng dữ liệu
- Availability: Luôn phản hồi
- Partition tolerance: Chịu lỗi mạng
Chỉ chọn được 2/3.
8. SQL vs NoSQL
| SQL | NoSQL |
|---|---|
| Schema cố định | Schema linh hoạt |
| Quan hệ chặt chẽ | Không quan hệ |
| ACID | BASE |
| Scale vertical | Scale horizontal |
| MySQL, PostgreSQL | MongoDB, Redis, Cassandra |
9. CÀI ĐẶT MYSQL
9.1 Tải và cài đặt
- Tải từ: https://dev.mysql.com/downloads/mysql/
- Hoặc dùng Docker:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=password -p 3306:3306 -d mysql:8
9.2 Kết nối
mysql -u root -p
9.3 Tạo database
CREATE DATABASE mydb;
USE mydb;
10. BÀI TẬP THỰC HÀNH
Bài 1: Phân tích thiết kế
Thiết kế database cho hệ thống quản lý sinh viên:
- Sinh viên (id, tên, ngày sinh, email)
- Khóa học (id, tên, số tín chỉ)
- Đăng ký (sinh viên - khóa học, ngày đăng ký, điểm)
Bài 2: Xác định quan hệ
- User - Profile: One-to-One
- User - Orders: One-to-Many
- Products - Categories: Many-to-Many
Bài 3: Normalization
Chuẩn hóa bảng sau về 3NF:
orders
| id | customer_name | customer_email | product1 | product2 | total |
11. TÓM TẮT
| Khái niệm | Mô tả |
|---|---|
| RDBMS | Database quan hệ |
| ACID | Atomicity, Consistency, Isolation, Durability |
| Normalization | Chuẩn hóa dữ liệu |
| Index | Tăng tốc truy vấn |
| Primary Key | Định danh duy nhất |
| Foreign Key | Tham chiếu giữa bảng |
| CAP | Consistency, Availability, Partition tolerance |
Bài tiếp theo: 4.2 SQL cơ bản
🧭 Điều Hướng Series
⬅️ Bài trước: PHASE 4: DATABASE & SQL - Tổng Quan & Mục Tiêu
📋 Lộ trình tổng quan: Xem Toàn Bộ Series
➡️ Bài tiếp theo: BÀI 4.2: SQL CƠ BẢN
All rights reserved