SQL Server/MySQL
Quản Lý Rạp Chiếu Phim - Khoá Học SQL Server
1. Database Creation
- Tạo database tên: QuanLyRapChieuPhim
- Sử dụng database vừa tạo
2. Table Creation
Bảng TheLoai
| Column | Datatype | Constraint |
|---|---|---|
| MaTheLoai | INT IDENTITY(1,1) | NOT NULL |
| TenTheLoai | NVARCHAR(100) | NOT NULL |
Bảng Phim
| Column | Datatype | Constraint |
|---|---|---|
| MaPhim | INT | NOT NULL |
| TenPhim | NVARCHAR(255) | NOT NULL |
| DaoDien | NVARCHAR(255) | NULL |
| DienVien | NVARCHAR(MAX) | NULL |
| MaTheLoai | INT | NOT NULL |
| Trailer | NVARCHAR(255) | NULL |
| NoiDung | NVARCHAR(MAX) | NULL |
Bảng NguoiDung
| Column | Datatype | Constraint |
|---|---|---|
| MaNguoiDung | INT | NOT NULL |
| TenNguoiDung | NVARCHAR(255) | NOT NULL |
| NgaySinh | DATE | NULL |
| SoDienThoai | VARCHAR(15) | NOT NULL |
| DiaChi | NVARCHAR(255) | NULL |
| MatKhau | NVARCHAR(255) | NOT NULL |
| CCCD | VARCHAR(20) | NOT NULL |
Bảng CoSo
| Column | Datatype | Constraint |
|---|---|---|
| MaCoSo | INT | NOT NULL |
| TenCoSo | NVARCHAR(255) | NOT NULL |
| DiaChi | NVARCHAR(255) | NULL |
Bảng PhongChieu
| Column | Datatype | Constraint |
|---|---|---|
| MaPhong | INT | NOT NULL |
| TenPhong | NVARCHAR(100) | NOT NULL |
| MaCoSo | INT | NOT NULL |
Bảng GheNgoi
| Column | Datatype | Constraint |
|---|---|---|
| MaGhe | INT | NOT NULL |
| MaPhong | INT | NOT NULL |
| LoaiGhe | NVARCHAR(50) | NOT NULL |
| MaGheCode | VARCHAR(10) | NOT NULL |
Bảng LichChieu
| Column | Datatype | Constraint |
|---|---|---|
| MaLichChieu | INT | NOT NULL |
| NgayChieu | DATE | NOT NULL |
| GioChieu | TIME | NOT NULL |
| MaPhim | INT | NOT NULL |
| MaCoSo | INT | NOT NULL |
| MaPhong | INT | NOT NULL |
Bảng DatVe
| Column | Datatype | Constraint |
|---|---|---|
| MaDatVe | INT | NOT NULL |
| MaLichChieu | INT | NOT NULL |
| MaGhe | INT | NOT NULL |
| MaNguoiDung | INT | NOT NULL |
| GiaTien | MONEY | NOT NULL |
| NgayDat | DATETIME | NULL |
| TrangThai | NVARCHAR(50) | NOT NULL |
3. Index and Table Alternation
-
Tạo CLUSTERED INDEX tên là
[CI_DatVe_MaDatVe]trên cột[MaDatVe]của bảng[DatVe] -
Tạo Unique Non-Clustered Index tên là
[UI_NguoiDung_SDT]trên cột[SoDienThoai]của bảng[NguoiDung] -
Thay đổi bảng
[GheNgoi], thêm cột mới tên là[TrangThai]với kiểu dữ liệu NVARCHAR(50)
4. Constraint Creation
Primary Key
- Bảng TheLoai: MaTheLoai
- Bảng Phim: MaPhim
- Bảng NguoiDung: MaNguoiDung
- Bảng CoSo: MaCoSo
- Bảng PhongChieu: MaPhong
- Bảng GheNgoi: MaGhe
- Bảng LichChieu: MaLichChieu
- Bảng DatVe: MaDatVe
Foreign Key
- Phim → TheLoai (MaTheLoai)
- PhongChieu → CoSo (MaCoSo)
- GheNgoi → PhongChieu (MaPhong)
- LichChieu → Phim (MaPhim)
- LichChieu → CoSo (MaCoSo)
- LichChieu → PhongChieu (MaPhong)
- DatVe → LichChieu (MaLichChieu)
- DatVe → GheNgoi (MaGhe)
- DatVe → NguoiDung (MaNguoiDung)
Check Constraint
- GiaTien > 0
- LoaiGhe ∈ ('NORMAL', 'VIP', 'SUPER VIP')
5. View Creation
Tạo View tên [v_LichChieu] hiển thị:
- MaPhim, TenPhim
- TenCoSo
- TenPhong
- NgayChieu, GioChieu
6. Stored Procedure
Tạo procedure [sp_GetLichChieuByPhim]
- Input: @TenPhim
- Output: danh sách lịch chiếu của phim đó
7. Stored Procedure
Tạo procedure [sp_InsertPhim]
- Thêm mới một phim vào bảng Phim
8. Stored Procedure
Tạo procedure [sp_DatVe]
- Input: MaNguoiDung, MaLichChieu, MaGhe
- Thực hiện đặt vé
9. Stored Procedure & Variable
- Khai báo biến ngày
-
Sử dụng:
Convert(datetime, 'dd/mm/yyyy', 103) - Thực thi procedure với biến
10. Trigger
Tạo trigger [FOR_INSERT_DATVE] cho sự kiện INSERT trên bảng DatVe:
- Nếu ghế đã được đặt trong cùng lịch chiếu → rollback
- Nếu chưa → cho phép insert
11. Trigger
Tạo trigger [InsteadOf_Delete_Phim] trên bảng Phim:
- Nếu phim đã có lịch chiếu → không cho xóa
- Nếu chưa → cho phép xóa
