BÀI TẬP SQL – HỆ THỐNG QUẢN LÝ BÁN HÀNG
1. Mô tả hệ thống
Công ty cần xây dựng hệ thống quản lý bán hàng gồm các chức năng:
-
Quản lý sản phẩm (Product) và danh mục (Category)
-
Quản lý đơn hàng (Order) và chi tiết đơn hàng (OrderDetail)
-
Quản lý phản hồi khách hàng (Feedback) cho từng đơn hàng
2. Yêu cầu chi tiết
A. Tạo cơ sở dữ liệu và bảng
Tạo CSDL với tên: sales
-
Danh mục (Category)
-
id (int, tự tăng)
-
name (varchar, tên danh mục)
-
description (varchar)
-
-
Sản phẩm (Product)
-
id (int, tự tăng)
-
category_id (int)
-
name (varchar)
-
price (float)
-
stock (int)
-
-
Đơn hàng (Orders)
-
id (int, tự tăng)
-
order_date (date)
-
customer_name (varchar)
-
customer_phone (varchar)
-
-
Chi tiết đơn hàng (OrderDetail)
-
id (int, tự tăng)
-
order_id (int)
-
product_id (int)
-
quantity (int)
-
unit_price (float)
-
-
Phản hồi (Feedback)
-
id (int, tự tăng)
-
order_id (int)
-
content (varchar)
-
rating (int: 1–5)
-
Lưu ý: Khi
CREATE TABLE
chưa tạo primary key, foreign key.
B. ALTER TABLE – Ràng buộc
-
Thêm PRIMARY KEY cho tất cả các bảng.
-
Thêm FOREIGN KEY:
-
product.category_id
tham chiếucategory.id
-
orderdetail.order_id
tham chiếuorders.id
-
orderdetail.product_id
tham chiếuproduct.id
-
feedback.order_id
tham chiếuorders.id
-
C. INDEX
-
Tạo index cho cột
name
trong bảngproduct
để tối ưu tìm kiếm sản phẩm.
D. Thao tác dữ liệu
-
INSERT: Thêm ít nhất 5 bản ghi cho mỗi bảng.
-
UPDATE:
-
Cập nhật giá sản phẩm.
-
Cập nhật thông tin khách hàng trong đơn hàng.
-
-
DELETE:
-
Xóa 1 chi tiết đơn hàng.
-
E. SELECT – Truy vấn dữ liệu
-
Liệt kê danh sách sản phẩm kèm tên danh mục.
-
Tính tổng số lượng và tổng tiền của mỗi đơn hàng.
-
Liệt kê tất cả đơn hàng có đánh giá (feedback) với rating ≥ 4.
-
Tìm top 3 sản phẩm bán chạy nhất.
F. VIEW
-
Tạo View hiển thị doanh thu chi tiết:
-
order_id, customer_name, tổng số sản phẩm, tổng tiền.
-
G. Stored Procedure
-
Viết procedure để:
-
Tìm tất cả sản phẩm theo
category_id
. -
Tìm thông tin chi tiết đơn hàng theo
order_id
.
-
H. Trigger
-
AFTER INSERT: Khi thêm chi tiết đơn hàng → giảm số lượng tồn kho của sản phẩm.
-
AFTER UPDATE: Nếu cập nhật số lượng trong chi tiết đơn hàng → cập nhật lại tồn kho.
-
AFTER DELETE: Nếu xóa chi tiết đơn hàng → hoàn lại số lượng tồn kho cho sản phẩm.
-
INSTEAD OF DELETE trên bảng
Orders
: Khi xóa đơn hàng thì không xóa thật, mà chỉ ghi log vào bảngOrders_Log
(cần tạo bảng log gồm order_id, deleted_date, reason).