Thiết kế CSDL quản lý carteen - Khóa học SQL Server
1. Mô tả bài toán
Trung tâm Aptech xây dựng một căng-tin để phục vụ sinh viên và nhân viên. Ứng dụng cần hỗ trợ 3 loại đối tượng chính: Quản lý, Nhân viên, Phục vụ.
Các chức năng chính:
-
Quản lý sản phẩm bán trong căng-tin.
-
Tạo lập và quản lý hóa đơn bán hàng.
-
Quản lý nhân viên.
-
Thống kê sản phẩm và doanh thu.
Ứng dụng được triển khai trên SQL Server với các yêu cầu:
-
Tạo CSDL, bảng, khóa chính, khóa ngoại, unique, check.
-
Thêm, sửa, xóa dữ liệu có điều kiện.
-
Truy vấn dữ liệu.
-
Nonclustered Index.
-
View (2 câu).
-
Stored Procedure (2 câu).
-
Trigger (2 câu: update và insert).
2. Thiết kế CSDL
Bảng Staff (Nhân viên)
-
StaffID: INT, PRIMARY KEY, IDENTITY(1,1)
-
FullName: NVARCHAR(100), NOT NULL
-
Gender: CHAR(1), CHECK (Gender IN ('M','F'))
-
BirthDate: DATE, NULL
-
Phone: VARCHAR(15), UNIQUE
-
Position: NVARCHAR(50), NOT NULL
-
Salary: DECIMAL(12,2), DEFAULT 0
Bảng Customer (Khách hàng – tùy chọn)
-
CustomerID: INT, PRIMARY KEY, IDENTITY(1,1)
-
FullName: NVARCHAR(100), NOT NULL
-
Phone: VARCHAR(15), NULL
Bảng Product (Sản phẩm)
-
ProductID: INT, PRIMARY KEY, IDENTITY(1,1)
-
ProductName: NVARCHAR(100), NOT NULL
-
Unit: NVARCHAR(20), NOT NULL
-
Price: DECIMAL(12,2), CHECK (Price >= 0)
-
Quantity: INT, CHECK (Quantity >= 0)
-
Category: NVARCHAR(50), NULL
Bảng Bill (Hóa đơn)
-
BillID: INT, PRIMARY KEY, IDENTITY(1,1)
-
BillDate: DATETIME, DEFAULT GETDATE()
-
StaffID: INT, FOREIGN KEY REFERENCES Staff(StaffID)
-
CustomerID: INT, FOREIGN KEY REFERENCES Customer(CustomerID), NULL
-
TotalAmount: DECIMAL(12,2), DEFAULT 0
Bảng BillDetail (Chi tiết hóa đơn)
-
BillDetailID: INT, PRIMARY KEY, IDENTITY(1,1)
-
BillID: INT, FOREIGN KEY REFERENCES Bill(BillID)
-
ProductID: INT, FOREIGN KEY REFERENCES Product(ProductID)
-
Quantity: INT, CHECK (Quantity > 0)
-
UnitPrice: DECIMAL(12,2), NOT NULL
-
SubTotal: DECIMAL(12,2), NOT NULL
Tóm tắt ràng buộc:
-
PRIMARY KEY: StaffID, CustomerID, ProductID, BillID, BillDetailID.
-
FOREIGN KEY:
-
Bill.StaffID → Staff(StaffID)
-
Bill.CustomerID → Customer(CustomerID)
-
BillDetail.BillID → Bill(BillID)
-
BillDetail.ProductID → Product(ProductID)
-
-
UNIQUE: Staff.Phone
3. Yêu cầu triển khai
-
Tạo Database và Table với các ràng buộc:
-
PRIMARY KEY, FOREIGN KEY.
-
CHECK, UNIQUE.
-
-
Thao tác dữ liệu:
-
INSERT: Thêm dữ liệu mẫu cho các bảng.
-
UPDATE: Sửa dữ liệu có điều kiện (VD: cập nhật lương nhân viên).
-
DELETE: Xóa dữ liệu có điều kiện (VD: xóa sản phẩm hết hạn).
-
SELECT: Truy vấn dữ liệu.
-
-
Nonclustered Index:
-
Tạo chỉ mục phụ cho cột ProductName trong bảng Product.
-
-
View (2 câu):
-
View 1: Danh sách sản phẩm và số lượng tồn kho.
-
View 2: Thống kê doanh thu theo ngày.
-
-
Stored Procedure (2 câu):
-
SP1: Tạo mới hóa đơn cùng chi tiết.
-
SP2: Tìm kiếm sản phẩm theo tên hoặc mã.
-
-
Trigger (2 câu):
-
Trigger 1: AFTER UPDATE trên bảng BillDetail → Cập nhật lại TotalAmount trong Bill.
-
Trigger 2: FOR INSERT trên bảng Staff → Xuất thông báo/log khi thêm nhân viên mới.
-