Chúng ta đã đi một chặng đường không ngắn trong chương 4 – nơi tập trung vào thiết kế và tối ưu cơ sở dữ liệu. Từ việc chuẩn hóa dữ liệu, chọn khóa chính – khóa ngoại hợp lý, cho đến sử dụng chỉ mục (index) để tăng tốc độ truy vấn… Tất cả đều là những kỹ năng thiết yếu để xây dựng một hệ thống dữ liệu bền vững, linh hoạt, hiệu quả.
Giờ là lúc tổng kết và vận dụng kiến thức qua bài tập thực tế: Phân tích và thiết kế hệ thống cơ sở dữ liệu cho một trang Blog cá nhân – đơn giản nhưng đủ để tổng hợp mọi kỹ năng bạn đã học.
Mục tiêu thực hành
- Phân tích yêu cầu thực tế từ một website Blog.
- Tạo bảng dữ liệu và thiết lập quan hệ giữa các bảng.
- Áp dụng chuẩn hóa để tránh dư thừa dữ liệu.
- Tối ưu truy vấn với chỉ mục.
- Hiểu vai trò thực tế của các lệnh
CREATE
,ALTER
,INDEX
.
Yêu cầu hệ thống Blog
Giả sử bạn đang xây dựng một hệ thống Blog với các chức năng:
- Quản lý người dùng (tác giả).
- Quản lý bài viết.
- Danh mục cho bài viết.
- Bình luận bài viết.
- Gắn thẻ (tag) cho bài viết.
Thiết kế bảng dữ liệu
Dưới đây là một bản thiết kế cơ sở dữ liệu mẫu:
1. users
– Lưu thông tin người dùng
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
2. categories
– Danh mục bài viết
CREATE TABLE categories (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) UNIQUE NOT NULL
);
3. posts
– Bài viết
CREATE TABLE posts (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(255) NOT NULL,
content TEXT,
user_id INT,
category_id INT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (category_id) REFERENCES categories(id)
);
4. comments
– Bình luận
CREATE TABLE comments (
id INT PRIMARY KEY AUTO_INCREMENT,
post_id INT,
user_id INT,
content TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
5. tags
& post_tags
– Gắn thẻ bài viết (nhiều-nhiều)
CREATE TABLE tags (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) UNIQUE NOT NULL
);
CREATE TABLE post_tags (
post_id INT,
tag_id INT,
PRIMARY KEY (post_id, tag_id),
FOREIGN KEY (post_id) REFERENCES posts(id),
FOREIGN KEY (tag_id) REFERENCES tags(id)
);
Áp dụng chuẩn hóa và tối ưu
- Chuẩn hóa: Mỗi bảng có nhiệm vụ rõ ràng, không trùng lặp dữ liệu. Ví dụ: tên danh mục được tách riêng ra bảng
categories
, thẻ gắn nằm trong bảngtags
. - Chỉ mục (index): Bạn có thể thêm index vào các trường như
user_id
,category_id
trong bảngposts
để tăng tốc tìm kiếm.CREATE INDEX idx_user_id ON posts(user_id);
Gợi ý nâng cao
- Bạn có thể mở rộng thêm chức năng như: lượt xem, trạng thái bài viết (public/draft), hoặc lịch sử chỉnh sửa.
- Sử dụng
ALTER TABLE
để thêm cột nếu cần:ALTER TABLE posts ADD COLUMN status ENUM('draft', 'published') DEFAULT 'draft';
Tổng kết
Thông qua bài thực hành thiết kế hệ thống Blog, bạn đã:
- Ứng dụng toàn bộ kiến thức từ chương 4 vào một hệ thống thật.
- Rèn luyện khả năng phân tích, chuẩn hóa, thiết kế, và tối ưu hóa cơ sở dữ liệu.
- Tạo nền tảng vững chắc để chuyển sang chương 5: SQL nâng cao và ứng dụng với PHP.
Sẵn sàng bước vào phần tiếp theo? Chúng ta sẽ bắt đầu với an toàn dữ liệu và chống SQL Injection – một trong những kỹ năng quan trọng nhất khi viết hệ thống web thực tế.
Thảo luận