- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQLQuery2.sql
More file actions
Latest commit
303 lines (263 loc) · 14.7 KB
/
Copy pathSQLQuery2.sql
File metadata and controls
303 lines (263 loc) · 14.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
-- Bảng NguoiDung
CREATETABLENguoiDung (
MaNguoiDung NVARCHAR(6) PRIMARY KEY, -- Mã định danh người dùng tự động tăng
Vaitro NVARCHAR(6) NOT NULL DEFAULT 'KhachHang', -- Vai trò mặc định là Khách hàng
Email NVARCHAR(100) UNIQUE NOT NULL, -- Email (đăng nhập)
TenTaiKhoan NVARCHAR(50) NULL, -- Tên tài khoản (đăng nhập, có thể NULL nếu dùng Google/Facebook)
MatKhau NVARCHAR(255) NULL, -- Mật khẩu (NULL nếu dùng Google/Facebook)
HoTen NVARCHAR(50) NULL, -- Họ và tên
CanCuocCongDan INT UNIQUE NULL, -- Số CCCD
SoDienThoai INT UNIQUE NULL, -- Số điện thoại
DiaChi NVARCHAR(100) NULL, -- Địa chỉ
NgaySinh DATENULL, -- Ngày sinh
GioiTinh NVARCHAR(10) NULL, -- Giới tính
HinhAnhURL NVARCHAR(255) NOT NULL DEFAULT 'https://i.pinimg.com/736x/20/ef/6b/20ef6b554ea249790281e6677abc4160.jpg', -- URL ảnh mặc định
NgayTao DATETIME DEFAULT GETDATE() -- Ngày tạo
);
ALTERTABLE NguoiDung
ALTER COLUMN CanCuocCongDan NVARCHAR(20); -- hoặc NVARCHAR(12) nếu chắc chắn là CCCD Việt Nam
ALTERTABLE NguoiDung
ALTER COLUMN SoDienThoai NVARCHAR(15); -- đủ dài để chứa số điện thoại Việt Nam, kể cả mã quốc gia
ALTERTABLE NguoiDung
ALTER COLUMN Vaitro NVARCHAR(15);
ALTERTABLE NguoiDung DROP CONSTRAINT UQ__NguoiDun__9A7D3DD7ACBA3F05;
ALTERTABLE NguoiDung ALTER COLUMN CanCuocCongDan NVARCHAR(20);
ALTERTABLE NguoiDung ADD CONSTRAINT UQ_CanCuocCongDan UNIQUE (CanCuocCongDan);
ALTERTABLE NguoiDung DROP CONSTRAINT UQ__NguoiDun__0389B7BD3800E751; -- Cho SoDienThoai
ALTERTABLE NguoiDung ALTER COLUMN SoDienThoai NVARCHAR(15);
ALTERTABLE NguoiDung ADD CONSTRAINT UQ_SoDienThoai UNIQUE (SoDienThoai);
select*from NguoiDung
INSERT INTO NguoiDung (
MaNguoiDung, Vaitro, Email, TenTaiKhoan, MatKhau, HoTen,
CanCuocCongDan, SoDienThoai, DiaChi, NgaySinh, GioiTinh
)
VALUES (
'ND002', 'QuanTriVien', 'admin@example.com', 'admin01', 'admin123',
N'Nguyễn Quản Trị', 123456789, 912345678, N'Hà Nội', '1990-01-01', N'Nam'
);
INSERT INTO NguoiDung (
MaNguoiDung, Vaitro, Email, TenTaiKhoan, MatKhau, HoTen,
CanCuocCongDan, SoDienThoai, DiaChi, NgaySinh, GioiTinh
)
VALUES (
'ND004', 'NhanVien', 'admin@xample.com', 'admin01', 'admin123',
N'Nguyễn Quản Trị', 123456786, 9123459678, N'Hà Nội', '1990-01-01', N'Nam'
);
INSERT INTO NguoiDung (
MaNguoiDung, Vaitro, Email, TenTaiKhoan, MatKhau, HoTen,
CanCuocCongDan, SoDienThoai, DiaChi, NgaySinh, GioiTinh
)
VALUES (
'ND005', 'NhanVien', 'admisn@xample.com', '11111', '11111',
N'Nguyễn Quản Trị', 1234586243, 9512345678, N'Hà Nội', '1990-01-01', N'Nam'
);
-- Bảng Phong
CREATETABLEPhong (
MaPhong NVARCHAR(6) PRIMARY KEY, -- Mã phòng tự động tăng
LoaiPhong NVARCHAR(50) NOT NULL, -- Loại phòng
GiaPhong DECIMAL(18,2) NOT NULL, -- Giá phòng gốc
TinhTrang TINYINT CHECK (TinhTrang IN (1, 2, 3, 4)) NOT NULL, -- 1: Trống, 2: Đã đặt, 3: Đang sử dụng, 4: Đang vệ sinh
SoLuongPhong INTNOT NULL DEFAULT 1, -- Số lượng phòng
Tang INTNOT NULL, -- Tầng
KieuGiuong NVARCHAR(50) NOT NULL, -- Kiểu giường
MoTa NVARCHAR(500) NULL, -- Mô tả chi tiết về phòng
UrlAnhChinh NVARCHAR(255) NOT NULL, -- URL ảnh chính
SucChua INTNOT NULL DEFAULT 2, -- Sức chứa tối đa
SoGiuong INTNOT NULL DEFAULT 1, -- Số lượng giường
DonViTinh NVARCHAR(50) NOT NULL DEFAULT '1 đêm', -- Đơn vị tính giá phòng
SoSaoTrungBinh DECIMAL(3,2) NOT NULL DEFAULT 0-- Số sao trung bình
);
-- Bảng PhongAnh
CREATETABLEPhongAnh (
MaAnh NVARCHAR(6) PRIMARY KEY, -- Mã ảnh tự động tăng
MaPhong NVARCHAR(6) NOT NULL, -- Mã phòng liên kết
UrlAnh NVARCHAR(255) NOT NULL, -- URL ảnh
FOREIGN KEY (MaPhong) REFERENCES Phong(MaPhong) ON DELETE CASCADE-- Ràng buộc với bảng Phong
);
-- Bảng TienNghi
CREATETABLETienNghi (
MaTienNghi NVARCHAR(6) PRIMARY KEY, -- Mã tiện nghi tự động tăng
TenTienNghi NVARCHAR(100) NOT NULL, -- Tên tiện nghi
MoTa NVARCHAR(500) NULL-- Mô tả chi tiết về tiện nghi (nếu cần)
);
-- Bảng Phong_TienNghi
CREATETABLEPhong_TienNghi (
MaPhong NVARCHAR(6) NOT NULL, -- Mã phòng
MaTienNghi NVARCHAR(6) NOT NULL, -- Mã tiện nghi
FOREIGN KEY (MaPhong) REFERENCES Phong(MaPhong) ON DELETE CASCADE,
FOREIGN KEY (MaTienNghi) REFERENCES TienNghi(MaTienNghi) ON DELETE CASCADE,
PRIMARY KEY (MaPhong, MaTienNghi) -- Chỉ định khóa chính cho cặp mã
);
-- Bảng GiamGia
CREATETABLEGiamGia (
MaGiamGia NVARCHAR(6) PRIMARY KEY, -- Mã giảm giá tự động tăng
TenGiamGia NVARCHAR(50) NOT NULL, -- Tên chương trình giảm giá
LoaiGiamGia NVARCHAR(6) CHECK (LoaiGiamGia IN ('PhanTram', 'SoTien')), -- Loại giảm giá
GiaTriGiam DECIMAL(18,2) NOT NULL, -- Giá trị giảm
NgayBatDau DATETIME NOT NULL, -- Ngày bắt đầu áp dụng giảm giá
NgayKetThuc DATETIME NOT NULL, -- Ngày kết thúc áp dụng giảm giá
MoTa NVARCHAR(255) NULL-- Mô tả chi tiết về chương trình giảm giá
);
-- Bảng Phong_GiamGia
CREATETABLEPhong_GiamGia (
MaPhong NVARCHAR(6) NOT NULL, -- Mã phòng
MaGiamGia NVARCHAR(6) NOT NULL, -- Mã giảm giá
PRIMARY KEY (MaPhong, MaGiamGia), -- Chỉ định khóa chính cho cặp mã
FOREIGN KEY (MaPhong) REFERENCES Phong(MaPhong),
FOREIGN KEY (MaGiamGia) REFERENCES GiamGia(MaGiamGia)
);
-- Bảng DichVu
CREATETABLEDichVu (
MaDichVu NVARCHAR(6) PRIMARY KEY, -- Mã dịch vụ tự động tăng
TenDichVu NVARCHAR(100) NOT NULL, -- Tên dịch vụ
DonGia DECIMAL(18,2) NOT NULL, -- Đơn giá
MoTaDichVu NVARCHAR(300) NULL, -- Mô tả dịch vụ
HinhAnhDichVu NVARCHAR(255) NOT NULL, -- URL ảnh dịch vụ
SoLuong INTNOT NULL DEFAULT 0, -- Số lượng dịch vụ
TrangThai TINYINT NOT NULL DEFAULT 1, -- Trạng thái dịch vụ
LoaiDichVu NVARCHAR(50) NOT NULL DEFAULT 'Khac', -- Loại dịch vụ
DonViTinh NVARCHAR(50) NOT NULL DEFAULT '1 lần', -- Đơn vị tính giá dịch vụ
CONSTRAINT CK_DichVu_TrangThai CHECK (TrangThai IN (0, 1)), -- Kiểm tra trạng thái hợp lệ
CONSTRAINT CK_DichVu_SoLuong CHECK (SoLuong >=0) -- Kiểm tra số lượng không âm
);
-- Bảng DatPhong
CREATETABLEDatPhong (
MaDatPhong NVARCHAR(6) PRIMARY KEY, -- Mã đặt phòng tự động tăng
MaNguoiDung NVARCHAR(6) NOT NULL, -- Mã người dùng
MaPhong NVARCHAR(6) NOT NULL, -- Mã phòng
NgayDat DATETIME DEFAULT GETDATE(), -- Ngày đặt
NgayCheckIn DATETIME, -- Ngày check-in
NgayCheckOut DATETIME, -- Ngày check-out
TinhTrangDatPhong TINYINT CHECK (TinhTrangDatPhong IN (1, 2, 3)) NOT NULL, -- 1: Đã xác nhận, 2: Đang chờ, 3: Hủy
FOREIGN KEY (MaNguoiDung) REFERENCES NguoiDung(MaNguoiDung),
FOREIGN KEY (MaPhong) REFERENCES Phong(MaPhong)
);
-- Bảng DatDichVu
CREATETABLEDatDichVu (
MaDatDichVu NVARCHAR(6) PRIMARY KEY, -- Mã đặt dịch vụ tự động tăng
MaDatPhong NVARCHAR(6) NOT NULL, -- Mã đặt phòng
MaDichVu NVARCHAR(6) NOT NULL, -- Mã dịch vụ
SoLuong INTNOT NULL DEFAULT 1, -- Số lượng dịch vụ
MaHoaDon NVarchar(6) NULL, -- Mã hóa đơn liên kết
FOREIGN KEY (MaDatPhong) REFERENCES DatPhong(MaDatPhong),
FOREIGN KEY (MaDichVu) REFERENCES DichVu(MaDichVu),
);
-- Xóa ràng buộc FK nếu chưa đặt tên, cần lấy tên bằng cách truy vấn (xem phía dưới nếu cần)
ALTERTABLE DatDichVu
DROP CONSTRAINT FK__DatDichVu__MaHoa__0371755F; -- Tên này có thể khác, cần thay đúng tên
-- Xóa cột
ALTERTABLE DatDichVu
DROP COLUMN MaHoaDon;
SELECT name
FROMsys.foreign_keys
WHERE parent_object_id = OBJECT_ID('DatDichVu');
-- Bảng HoaDon
CREATETABLEHoaDon (
MaHoaDon NVARCHAR(6) PRIMARY KEY, -- Mã hóa đơn tự động tăng
MaNguoiDung NVARCHAR(6) NOT NULL, -- Mã người dùng
MaDatPhong NVARCHAR(6) NOT NULL, -- Mã đặt phòng
TongTien DECIMAL(18,2) NOT NULL, -- Tổng tiền phải trả
NgayTaoHoaDon DATETIME DEFAULT GETDATE(), -- Ngày tạo hóa đơn
NgayThanhToan DATETIME NULL, -- Ngày thanh toán
TinhTrangHoaDon TINYINT CHECK (TinhTrangHoaDon IN (1, 2)) NOT NULL, -- 1: Đã thanh toán, 2: Chưa thanh toán
FOREIGN KEY (MaNguoiDung) REFERENCES NguoiDung(MaNguoiDung),
FOREIGN KEY (MaDatPhong) REFERENCES DatPhong(MaDatPhong)
);
-- Bảng ChiTietHoaDon
CREATETABLEChiTietHoaDon (
MaChiTiet NVARCHAR(6) PRIMARY KEY, -- Mã chi tiết hóa đơn
MaHoaDon NVARCHAR(6) NOT NULL, -- Mã hóa đơn
LoaiKhoanMuc NVARCHAR(12) NOT NULL, -- Loại khoản mục (Phong, DichVu, GiamGia)
MaKhoanMuc NVARCHAR(12) NOT NULL, -- Mã khoản mục (MaPhong, MaDichVu, MaGiamGia)
SoLuong INTNOT NULL DEFAULT 1, -- Số lượng
ThanhTien DECIMAL(18,2) NOT NULL, -- Thành tiền
FOREIGN KEY (MaHoaDon) REFERENCES HoaDon(MaHoaDon)
);
-- Bảng ThanhToan
CREATETABLEThanhToan (
MaThanhToan NVARCHAR(6) PRIMARY KEY, -- Mã thanh toán với tiền tố 'TT'
MaHoaDon NVARCHAR(6) NOT NULL, -- Mã hóa đơn
SoTienThanhToan DECIMAL(18,2) NOT NULL, -- Số tiền thanh toán
NgayThanhToan DATETIME DEFAULT GETDATE(), -- Ngày thanh toán
PhuongThucThanhToan NVARCHAR(50) NOT NULL, -- Phương thức thanh toán
TinhTrangThanhToan NVARCHAR(1) CHECK (TinhTrangThanhToan IN ('1', '2')) NOT NULL, -- 1: Hoàn tất, 2: Chưa hoàn tất
FOREIGN KEY (MaHoaDon) REFERENCES HoaDon(MaHoaDon)
);
-- Bảng Feedback
CREATETABLEFeedback (
MaFeedback NVARCHAR(6) PRIMARY KEY, -- Mã phản hồi với tiền tố 'FB'
MaPhong NVARCHAR(6) NOT NULL, -- Mã phòng
MaNguoiDung NVARCHAR(6) NOT NULL, -- Mã người dùng
SoSao INTCHECK (SoSao BETWEEN 1AND5) NOT NULL, -- Số sao (1-5 sao)
BinhLuan NVARCHAR(500) NULL, -- Bình luận của người dùng
NgayFeedback DATETIME DEFAULT GETDATE(), -- Ngày tạo phản hồi
FOREIGN KEY (MaPhong) REFERENCES Phong(MaPhong),
FOREIGN KEY (MaNguoiDung) REFERENCES NguoiDung(MaNguoiDung)
);
ALTERTABLE Feedback
ADD PhanLoai NVARCHAR(10) NOT NULL
CHECK (PhanLoai IN ('TichCuc', 'TieuCuc'));
-- Bảng NhanVien
CREATETABLENhanVien (
MaNhanVien NVARCHAR(6) PRIMARY KEY, -- Mã nhân viên
MaNguoiDung NVARCHAR(6) NOT NULL, -- Mã người dùng
ChucVu NVARCHAR(50) NOT NULL, -- Chức vụ
Luong DECIMAL(18,2) NOT NULL, -- Lương
NgayVaoLam DATETIME DEFAULT GETDATE(), -- Ngày vào làm
CaLamViec NVARCHAR(50) NULL, -- Ca làm việc (Sáng, Chiều, Tối)
FOREIGN KEY (MaNguoiDung) REFERENCES NguoiDung(MaNguoiDung)
);
-- Bảng LichSuGiaoDich
CREATETABLELichSuGiaoDich (
MaGiaoDich NVARCHAR(6) PRIMARY KEY, -- Mã giao dịch
MaNguoiDung NVARCHAR(6) NOT NULL, -- Mã người dùng
LoaiGiaoDich NVARCHAR(50) NOT NULL, -- Loại giao dịch (DatPhong, HuyPhong, ThanhToan, ...)
ThoiGianGiaoDich DATETIME DEFAULT GETDATE(), -- Thời gian giao dịch
MoTa NVARCHAR(255) NULL, -- Mô tả giao dịch
FOREIGN KEY (MaNguoiDung) REFERENCES NguoiDung(MaNguoiDung)
);
-- Bảng BaoCao
CREATETABLEBaoCao (
MaBaoCao NVARCHAR(6) PRIMARY KEY, -- Mã báo cáo
LoaiBaoCao NVARCHAR(50) NOT NULL, -- Loại báo cáo (DoanhThu, SuDungPhong, ...)
ThoiGian DATETIME DEFAULT GETDATE(), -- Thời gian tạo báo cáo
NoiDung TEXTNULL-- Nội dung báo cáo
);
-- Bảng ChiTietBaoCao
CREATETABLEChiTietBaoCao (
MaChiTiet NVARCHAR(6) PRIMARY KEY, -- Mã chi tiết báo cáo
MaBaoCao NVARCHAR(6) NOT NULL, -- Mã báo cáo
NoiDungChiTiet NVARCHAR(255) NOT NULL, -- Nội dung chi tiết
GiaTri DECIMAL(18,2) NOT NULL, -- Giá trị (ví dụ: doanh thu, tỷ lệ sử dụng)
FOREIGN KEY (MaBaoCao) REFERENCES BaoCao(MaBaoCao)
);
CREATETABLEPhongYeuThich (
Id INT IDENTITY PRIMARY KEY,
MaPhong NVARCHAR(6) NOT NULL,
MaNguoiDung INTNOT NULL,
NgayYeuThich DATETIME DEFAULT GETDATE(),
CONSTRAINT FK_PhongYeuThich_Phong FOREIGN KEY (MaPhong) REFERENCES Phong(MaPhong),
CONSTRAINT FK_PhongYeuThich_NguoiDung FOREIGN KEY (MaNguoiDung) REFERENCES NguoiDung(MaNguoiDung),
CONSTRAINT UQ_PhongYeuThich UNIQUE (MaPhong, MaNguoiDung) -- 1 người chỉ thích 1 phòng 1 lần
);
CREATETABLENoiQuy (
id INTPRIMARY KEY ,
soThuTu INTNOT NULL, -- Số thứ tự hiển thị
tieuDe NVARCHAR(255) NOT NULL, -- Tiêu đề ngắn (vd: Giờ nhận phòng)
noiDung NVARCHAR(MAX) NOT NULL, -- Nội dung
hinhAnh NVARCHAR(500) -- Link ảnh minh họa
);
DROPTABLE NhanVien;
SELECTp.MaPhong, p.LoaiPhong, p.GiaPhong, p.TinhTrang, p.SoLuongPhong, p.Tang,
p.KieuGiuong, p.MoTa, p.UrlAnhChinh, p.SucChua, p.SoGiuong,
p.DonViTinh, p.SoSaoTrungBinh
FROM Phong p
SELECTtn.MaTienNghi, tn.TenTienNghi, tn.MoTa
FROM TienNghi tn
JOIN Phong_TienNghi ptn ONtn.MaTienNghi=ptn.MaTienNghi
WHEREptn.MaPhong='P001'
SELECTgg.MaGiamGia, gg.TenGiamGia, gg.LoaiGiamGia, gg.GiaTriGiam, gg.NgayBatDau, gg.NgayKetThuc, gg.MoTa
FROM GiamGia gg
JOIN Phong_GiamGia pg ONgg.MaGiamGia=pg.MaGiamGia
WHEREpg.MaPhong='P001'
Select*from Phong