-
Trigger (6 bài)
- Trigger kiểm tra tuổi sinh viên ≥ 18
Tạo trigger BEFORE INSERT trên bảng
SinhVien, nếuNgaySinhkhiến tuổi < 18 → từ chối thêm. - Trigger cập nhật số lượng tồn kho
Khi chèn
ChiTietHoaDon, giảm số lượng sản phẩm trong bảngSanPhamtương ứng. - Trigger log lại lịch sử cập nhật lương
Khi bảng
NhanVienthay đổi cộtLuong, ghi vào bảngLichSuLuong:- MaNV
- LuongCu
- LuongMoi
- NgayCapNhat
- Không cho xóa lớp nếu còn sinh viên
Tạo trigger BEFORE DELETE trên
Lop. Nếu Lop cònSinhVien→ hủy DELETE. - Trigger tự động tạo username khi thêm nhân viên
Tự động sinh
Usernametừ họ tên (ví dụ: "Nguyen Van A" → "nguyenvana") và ghi vào bảngAccounts. - Trigger ghi log đăng nhập
Khi bảng
LoginHistorythêm bản ghi → tự động thêm thời gian vàoLoginTime.
- Trigger kiểm tra tuổi sinh viên ≥ 18
Tạo trigger BEFORE INSERT trên bảng
-
Index (4 bài)
- Tạo index cho tìm kiếm sinh viên theo tên
Tạo index trên
SinhVien(HoTen)để tối ưuSELECT * WHERE HoTen LIKE 'A%'. - Tạo composite index cho bảng
ChiTietHoaDonIndex trên(MaHD, MaSP)để tăng tốc truy vấn JOIN. - Tạo unique index để tránh trùng email
Tạo
UNIQUE INDEXtrênUsers(Email). - So sánh hiệu suất trước và sau index
Viết 2 truy vấn SELECT lớn để đo tốc độ:
- Không có index
- Có index trên cột NgayTao (Dùng EXPLAIN ANALYZE)
- Tạo index cho tìm kiếm sinh viên theo tên
Tạo index trên
-
View (4 bài)
- Tạo view tổng hợp điểm sinh viên
View gồm:
- MaSV
- HoTen
- TenMH
- DiemSo
- DiemChu (CASE WHEN DiemSo ≥ 8 THEN 'A' …)
- Tạo view top 10 sản phẩm bán chạy
Dựa trên bảng
HoaDon+ChiTietHoaDon:- MaSP
- TenSP
- TongSoLuongBan → LIMIT 10.
- View danh sách sinh viên theo khoa JOIN SinhVien → Lop → Khoa.
- View lương nhân viên sau khi trừ thuế
Hiển thị:
- HoTen
- LuongGoc
- LuongSauThue = Luong * 0.9
- Tạo view tổng hợp điểm sinh viên
View gồm:
-
Stored Procedure / Function (4 bài)
- Stored procedure thêm sinh viên
SP AddStudent(MaSV, HoTen, NgaySinh, MaLop) nhưng kiểm tra:
- Không trùng MaSV
- Lớp tồn tại
- Nếu OK → INSERT.
- Stored procedure cập nhật lương theo %
Input: MaNV, percent_increase
→
tăng lương = lương hiện tại * (1 + percent/100) - Function tính tuổi Viết function TinhTuoi(NgaySinh) trả về số tuổi.
- Function tính GPA 4.0
Input MaSV → trả
GPA = SUM(diem * tín_chỉ) / SUM(tín_chỉ)theo thang 4.
- Stored procedure thêm sinh viên
SP AddStudent(MaSV, HoTen, NgaySinh, MaLop) nhưng kiểm tra:
-
Normalization (Chuẩn hóa) (2 bài)
-
Chuẩn hóa bảng chứa dữ liệu bị lặp Bảng gốc:
| MaSV | TenSV | TenLop | TenKhoa | TenKhoaTruong |Yêu cầu:- Chuẩn hóa lên 3NF
- Tạo các bảng
Khoa,Lop,SinhVien,KhoaTruong - Phân tích khóa chính/phụ từng bảng
-
Chuẩn hóa bảng ChiTietDonHang Bảng gốc chứa:
| MaDH | TenKH | DiaChi | MaSP | TenSP | DonGia | SoLuong |Yêu cầu:- Xác định bất thường (insert/update/delete anomaly)
- Chuẩn hóa lên 3NF:
KhachHang,DonHang,SanPham,ChiTietDonHang
-
./
│ index.sql
│ normalization.sql
│ README.md
│ stored-procedure-function.sql
│ trigger.sql
└───view.sql
- IDE: DataGrip
- Database: MySQL 8.4
Khang Nguyen