PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆNPhát biểu bài toánThiết kế CSDL mức khái niệmThiết kế CSDL mức logic – mô hình quan hệCả nhómTạo cơ sở dữ liệuXây dựng các View cho cơ sở dữ liệu Đoàn Ngô
Phát biểu bài toán
Khách sạn là một công trình kiến trúc kiên cố, có nhiều tầng, nhiều phòng ngủ được trang bị các thiết bị, tiện nghi, đồ đạc chuyên dùng nhằm mục đích kinh doanh các dịch vụ lưu trú, phục vụ ăn uống và các dịch vụ.
Mỗi khách hàng khi đến thuê phòng của khách sạn sẽ được lưu trữ với thông tin về mã khách hàng, chứng minh nhân dân, họ tên khách hàng, ngày sinh, giới tính,quốc tịch, số điện thoại Mỗi khách hàng được phân biệt nhau bởi mã khách hàng.
Mỗi nhân viên trong khách sạn được lưu trữ các thông tin cá nhân: mã nhân viên, họ tên nhân viên, ngày sinh, giới tính, số điện thoại Mỗi nhân viên được phân biệt với nhau bởi mã nhân viên.
Mỗi chức vụ có nhiều nhân viên, mỗi chức vụ gồm có: mã chức vụ, tên chức vụ, hệ số lương
Khách hàng thuê phòng với các thông tin của phòng: mã phòng, số điện thoại phòng, tình trạng của phòng Mỗi phòng được phân biệt với nhau bởi mã phòng.
Mỗi phòng thuộc 1 loại phòng Mỗi loại phòng bao gồm nhiều phòng, mỗi loại phòng gồm có: mã loại phòng, tên loại phòng, số người ở được tối đa, giá phòng.
Khi khách hàng đến thuê phòng, nhân viên khách sạn sẽ lưu thông tin của khách hàng vào hệ thống Và khi khách hàng có yêu cầu trả phòng, nhân viên sẽ lập hóa đơn cho khách hàng, mỗi nhân viên có thể lập được nhiều hóa đơn, mỗi hóa đơn bao gồm các thông tin: mã hóa đơn, số người khách hàng tới, ngày đến, ngày dự kiến đi, ngày lập hóa đơn và số tiền đặt cọc. Mỗi hóa đơn có thể thuê được nhiều phòng, được kê trong bảng chi tiết hóa đơn với các thông tin liên quan. Để đáp ứng đầy đủ các yêu cầu để phục vụ khách hàng, khách sạn có mở thêm các gói dịch vụ, với mỗi gói dịch vụ sẽ có thông tin: mã dịch vụ, tên dịch vụ, giá dịch vụ Mỗi phiếu chi tiết hóa đơn sẽ có nhiều dịch vụ khác nhau được kê trong bảng dịch vụ sử dụng trong đó ghi rõ số lượng sử dụng dịch vụ và ngày sử dụng dịch vụ của khách hàng.
Thiết kế CSDL mức khái niệm 1 Xác định các thực thể và thuộc tính
Xác định các liên kết
CHỨC VỤ - Có - NHÂN VIÊN: 1-n
NHÂN VIÊN - Lập - HÓA ĐƠN: 1-n
HÓA ĐƠN - Chứa - DỊCH VỤ: m-n
KHÁCH HÀNG - Có - HÓA ĐƠN: 1-n
Thiết kế CSDL mức logic – mô hình quan hệ 1 Chuyển đổi thực thể mạnh
Chuyển đổi quan hệ 1 – n
R1.1: tblNhanVien (MaNV,TenNV,NgaySinh,GioiTinh,Sdt_NV, MaCV)
R4.1: tblPhong (MaP,SDt_P, TinhTrang, MaLP)
R7.1:tblHoaDon(MaHD,SoNguoi,NgayDen,NgayDKDi,NgayLap,TienDat Coc, MaNV)
R7.2:tblHoaDon(MaHD,SoNguoi,NgayDen,NgayDKDi,NgayLap,TienDatCoc,MaNV, MaKH)
Chuyển đổi quan hệ m – n
Cách chuyển: Cho mỗi mối liên kết MN, sinh ra một quan hệ mới R, chuyển khóa chính của hai quan hệ phía M và N thành khóa ngoại của quan hệ R Khóa chính của R là sự kết hợp của hai khóa ngoại
Cơ sở dữ liệu sau khi chuyển
R1: tblNhanVien (MaNV,TenNV,NgaySinh,GioiTinh,Sdt_NV, MaCV) R2: tblChucVu (MaCV, TenCV, HSL)
R3:tblKhachHang(MaKH,CMND,TenKH,NgaySinh,GioiTinh,Sdt_KH) R4: tblPhong (MaP, Sdt_P, TinhTrang, MaLP)
R5: tblLoaiPhong (MaLP, TenLP, SoNguoiMax, GiaP )
R7:tblHoaDon(MaHD,SoNguoi,NgayDen,NgayDKDi,NgayLap,TienDatCoc, MaNV, MaKH)
Danh sách các bảng
tblNhanVien: lưu trữ thông tin của nhân viên
T Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaNV varchar(10) PK mã nhân viên
2 sTenNV Nvarchar(25) tên nhân viên
4 sGioitinh nvarchar(3) chỉ nhận giá trị
“nam” hoặc “nữ” giới tính
5 sMaCV varchar(10) FK mã chức vụ
6 sSdt_NV nvarchar(10) số điện thoại của nhân viên tblChucVu:
STT Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaCV varchar(10) PK mã chức vụ
2 sTenCV Nvarchar(25) tên chức vụ
3 fHSL float hệ số lương tblKhachHang
STT Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaKH varchar(10) PK mã khách hàng
3 sTenKH Nvarchar(25) tên khách hàng
5 sGioitinh nvarchar(3) chỉ nhận giá trị
“nam” hoặc “nữ” Giới tính
6 sSdt_KH nvarchar(10) số điện thoại của khách hàng
T Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaP varchar(10) PK mã phòng
3 sTinhtrang Nvarchar(3) Chỉ nhận giá trị
‘Còn’ hoặc ‘Hết’ tình trạng còn phòng hay hết phòng
4 sMaLP varchar(10) FK mã loại phòng tblLoaiPhong
STT Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaLP varchar(10) PK mã loại phòng
2 sTenLP Nvarchar(25) tên loại phòng
3 iSonguoima x int số người max
4 fGiaphong float giá phòng tblDichVu
STT Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaDV varchar(10) PK mã dịch vụ
2 sTenDV Nvarchar(25) tên dịch vụ
3 fGiaDV float giá dịch vụ
STT Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaHD varchar(10) PK mã hóa đơn
4 dNgayDKDI datetime ngày đăng kí đi
6 fTiendatcoc float tiền đặt cọc
7 sMaNV varchar(10) FK mã nhân viên
8 sMaKH varchar(10) FK mã khách hàng tblDichVuSuDung
STT Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaHD varchar(10) PK mã HĐ
2 sMaDV varchar(10) FK mã dịch vụ
3 iSoluong int số lượng tblCTHD
STT Tên trường Kiểu dữ liệu Ràng buộc Ghi chú
1 sMaHD varchar(10) PK mã HĐ
2 sMaP varchar(10) FK mã phòng
Tạo cơ sở dữ liệu 1 Tạo sơ đồ liên kết giữa các bảng
Nhập dữ liệu cho từng bảng
INSERT INTO tblNhanVien sMaNV sTenNV dNS sGioitinh sMaCV sSdt_NV ( , , , , , ) VALUES('NV1' ,'Nguyen Van Hoang', '1999/04/16' 'Nam' 'CV2' '0982860164' , , , ), ('NV2' ,'Nguyen Thuy Duong', '2002/01/01' 'Nu' 'CV3' '0901012002' , , , ), ('NV3' ,'Hoang Bao An', '2000/08/11' 'Nu' 'CV5' '0962091604' , , , ),
( 'NV4' ,'Pham Tien Dat', '1995/01/01' 'Nam' 'CV6' '0935465845' , , , ),
('NV5' ,'Bui Dinh Dat', '1998/05/25' 'Nam' 'CV7' '0984654851' , , , ),
('NV6' ,'Le Huong Lan', '1996/08/11' 'Nu' 'CV1' '0945156354' , , , ),
('NV7' ,'Luu Phuong Anh', '1999/10/06' 'Nu' 'CV9' '0962512032' , , , ),
( 'NV8' ,'Doan Hai Nam', '1996/02/20' 'Nam' 'CV10' '0984251203' , , , ),
( 'NV9' ,'Dinh Cong Hai', '1997/11/11' 'Nam' 'CV8' '0985654212' , , , ),
('NV10' ,'Hoang Thao Quyen', '1989/08/25' 'Nu' 'CV6' '0975654215' , , , )
INSERT INTO tblChucVu sMaCV sTenCV fHSL ( , , )
INSERT INTO tblKhachHang sMaKH sCMND sTenKH sNgaysinh sGioitinh sSdt_KH ( , , , , , )
VALUES('KH1' '123456789' , ,'Hoang Tung Phong', '1995/02/05' 'Nam' '0985456985' , , ), ('KH2' '987654321' , ,'Pham Van Tien', '1999/05/04' 'Nam' '0975654254' , , ), ( 'KH3' '678954321' , ,'Nguyen Thi Hanh', '2000/06/20' 'Nu' '0964254265' , , ), ( 'KH4' '654845321' , ,'Nguyen Thuy Hanh', '1998/05/24' 'Nu' '0965254152' , , ), ( 'KH5' '521000213' , ,'Bui Hoang Oanh', '2000/04/29' 'Nu' '0984654215' , , ), ('KH6' '589789987' , ,'Nguyen Thuy Linh', '1990/12/31' 'Nu' '0965485658' , , ), ( 'KH7' '654456546' , ,'Pham Tien Dat', '1997/09/15' 'Nam' '0984654254' , , ), ( 'KH8' '666688888' , ,'Pham Xuan Tu', '1999/04/16' 'Nam' '0988886666' , , ), ('KH9' '987456085' , ,'Phan Phuong Linh', '1996/10/20' 'Nu' '0974652102' , , ), ( 'KH10' '963258741' , ,'Hoang Thuy Dung', '2001/01/20' 'Nu' '0966668888' , , )
12SQL Server – Nhóm 2 d Kết quả: e Cấp quyền INSERT vào bảng tblKhachHang, tblNhanVien cho người dùng dnh:
3 Tạo tài khoản cho Nguyễn Thị Hương: a Tạo tài khoản:
CREATE LOGIN nguyenhuong WITH PASSWORD = '123456' b Tạo người dùng tương ứng:
CREATE USER nth FOR LOGIN nguyenhuong c Đăng nhập: d Kết quả:
40SQL Server – Nhóm 2 e Cấp quyền exec thủ tục cho người dùng nth:
GRANT EXECUTE ON prDemPhong_SDDV TO nth
GRANT EXECUTE ON prDSKH_NamSinh TO nth
GRANT EXECUTE ON dbo.prGiamgiaDV TO nth
4 Tạo tài khoản cho Vi Thị Khánh Huyền: a Tạo tài khoản:
CREATE LOGIN khanhhuyen WITH PASSWORD = '123456' b Tạo người dùng tương ứng:
CREATE USER vtkh FOR LOGIN khanhhuyen c Đăng nhập: d Kết quả:
41SQL Server – Nhóm 2 e Cấp quyền chỉ xem cho cho người dùng btkh:
IX Phân tán cơ sở dữ liệu:
Tạo 1 linkserver kết nối từ máy chủ sang máy ảo có tên 'MAY1':
@datasrc = '192.168.52.128'; a Kiểm tra kết nối:
EXEC sp_linkedservers b Đăng nhập kết nối:
EXEC master.dbo.sp_addlinkedsrvlogin
Tạo 1 linkserver kết nối từ máy chủ sang máy ảo có tên 'MAY2':
@datasrc = '192.168.52.129'; a Kiểm tra kết nối:
42SQL Server – Nhóm 2 b Đăng nhập kết nối:
EXEC master.dbo.sp_addlinkedsrvlogin
Phân tán ngang bảng tblDichVu
Thủ tục thêm mới dịch vụ, phân tán ngang bảng tblDichVu:
CREATE PROC prInsertDV(@MaDV varchar(10), @TenDV nvarchar(25), @GiaDV float)
IF EXISTS (SELECT * FROM tblDichVu WHERE sMaDV @MaDV)
PRINT N'Tồn tại mã dịch vụ: ' + @MaDV END
BEGIN INSERT INTO tblDichVu(sMaDV,sTenDV,fGiaDV)
INSERT INTO MAY1.BTL_SQLServer_Nhom_2.dbo.tblDichVu(sMaDV,sTenDV,fGia DV)
VALUES(@MaDV, @TenDV, @GiaDV) PRINT N'Đã thêm vào máy 1 thành công dịch vụ mã: ' +@MaDV
BEGIN INSERT INTO tblDichVu(sMaDV,sTenDV,fGiaDV)
INSERT INTO MAY2.BTL_SQLServer_Nhom_2.dbo.tblDichVu(sMaDV,sTenDV,fGia DV)
VALUES(@MaDV, @TenDV, @GiaDV) PRINT N'Đã thêm vào máy 2 thành công dịch vụ mã: ' +@MaDV
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sTenKH nvarchar(25)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sCMND nvarchar(25), sNgaysinh datetime, sGioitinh nvarchar(3) CHECK (sGioitinh=N'Nam' or sGioitinh=N'Nu'), sSdt_KH nvarchar(10)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
- Nếu giá dịch vụ lớn hơn 1500 thì thêm vào máy 1:
- Ngược lại thêm vào máy 2:
EXEC prInsertDV 'DV12','Ca Nhac','500'
Phân tán dọc bảng tblKhachHang
Thủ tục thêm mới khách hàng, phân tán dọc bảng tblKhachHang
CREATE PROC prInsertKH(@MaKH varchar(10), @CMND nvarchar(25), @TenKH nvarchar(25), @Ngaysinh datetime,
@Gioitinh varchar(3),@Sdt_KH nvarchar(10))
IF EXISTS (SELECT * FROM tblKhachHang WHERE sMaKH @MaKH)
PRINT N'Tồn tại mã khách hàng: ' + @MaKH END
INSERT INTO tblKhachHang(sMaKH,sTenKH,sCMND,sNgaysinh,sGioitinh,sSdt_KH)
VALUES(@MaKH,@TenKH, @CMND, @Ngaysinh,
INSERT INTO MAY1.BTL_SQLServer_Nhom_2.dbo.tblKhachHang(sMaKH,sTenKH)
INSERT INTO MAY2.BTL_SQLServer_Nhom_2.dbo.tblKhachHang(sMaKH,sCMND,s Ngaysinh,sGioitinh,sSdt_KH)
VALUES(@MaKH, @CMND, @Ngaysinh, @Gioitinh,
PRINT N'Thêm thành công khách hàng mã: ' + @MaKH END
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sTenKH nvarchar(25)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sCMND nvarchar(25), sNgaysinh datetime, sGioitinh nvarchar(3) CHECK (sGioitinh=N'Nam' or sGioitinh=N'Nu'), sSdt_KH nvarchar(10)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
- Máy 1: mã khách hàng, tên khách hàng
Phân tán cơ sở dữ liệu
Tạo 1 linkserver kết nối từ máy chủ sang máy ảo có tên 'MAY1':
@datasrc = '192.168.52.128'; a Kiểm tra kết nối:
EXEC sp_linkedservers b Đăng nhập kết nối:
EXEC master.dbo.sp_addlinkedsrvlogin
Tạo 1 linkserver kết nối từ máy chủ sang máy ảo có tên 'MAY2':
@datasrc = '192.168.52.129'; a Kiểm tra kết nối:
42SQL Server – Nhóm 2 b Đăng nhập kết nối:
EXEC master.dbo.sp_addlinkedsrvlogin
Phân tán ngang bảng tblDichVu
Thủ tục thêm mới dịch vụ, phân tán ngang bảng tblDichVu:
CREATE PROC prInsertDV(@MaDV varchar(10), @TenDV nvarchar(25), @GiaDV float)
IF EXISTS (SELECT * FROM tblDichVu WHERE sMaDV @MaDV)
PRINT N'Tồn tại mã dịch vụ: ' + @MaDV END
BEGIN INSERT INTO tblDichVu(sMaDV,sTenDV,fGiaDV)
INSERT INTO MAY1.BTL_SQLServer_Nhom_2.dbo.tblDichVu(sMaDV,sTenDV,fGia DV)
VALUES(@MaDV, @TenDV, @GiaDV) PRINT N'Đã thêm vào máy 1 thành công dịch vụ mã: ' +@MaDV
BEGIN INSERT INTO tblDichVu(sMaDV,sTenDV,fGiaDV)
INSERT INTO MAY2.BTL_SQLServer_Nhom_2.dbo.tblDichVu(sMaDV,sTenDV,fGia DV)
VALUES(@MaDV, @TenDV, @GiaDV) PRINT N'Đã thêm vào máy 2 thành công dịch vụ mã: ' +@MaDV
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sTenKH nvarchar(25)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sCMND nvarchar(25), sNgaysinh datetime, sGioitinh nvarchar(3) CHECK (sGioitinh=N'Nam' or sGioitinh=N'Nu'), sSdt_KH nvarchar(10)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
- Nếu giá dịch vụ lớn hơn 1500 thì thêm vào máy 1:
- Ngược lại thêm vào máy 2:
EXEC prInsertDV 'DV12','Ca Nhac','500'
Phân tán dọc bảng tblKhachHang
Thủ tục thêm mới khách hàng, phân tán dọc bảng tblKhachHang
CREATE PROC prInsertKH(@MaKH varchar(10), @CMND nvarchar(25), @TenKH nvarchar(25), @Ngaysinh datetime,
@Gioitinh varchar(3),@Sdt_KH nvarchar(10))
IF EXISTS (SELECT * FROM tblKhachHang WHERE sMaKH @MaKH)
PRINT N'Tồn tại mã khách hàng: ' + @MaKH END
INSERT INTO tblKhachHang(sMaKH,sTenKH,sCMND,sNgaysinh,sGioitinh,sSdt_KH)
VALUES(@MaKH,@TenKH, @CMND, @Ngaysinh,
INSERT INTO MAY1.BTL_SQLServer_Nhom_2.dbo.tblKhachHang(sMaKH,sTenKH)
INSERT INTO MAY2.BTL_SQLServer_Nhom_2.dbo.tblKhachHang(sMaKH,sCMND,s Ngaysinh,sGioitinh,sSdt_KH)
VALUES(@MaKH, @CMND, @Ngaysinh, @Gioitinh,
PRINT N'Thêm thành công khách hàng mã: ' + @MaKH END
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sTenKH nvarchar(25)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
CREATE DATABASE BTL_SQLServer_Nhom_2 COLLATE
CREATE TABLE tblKhachHang( sMaKH varchar(10) NOT NULL PRIMARY KEY, sCMND nvarchar(25), sNgaysinh datetime, sGioitinh nvarchar(3) CHECK (sGioitinh=N'Nam' or sGioitinh=N'Nu'), sSdt_KH nvarchar(10)
CREATE TABLE tblDichVu( sMaDV varchar(10) NOT NULL PRIMARY KEY, sTenDV nvarchar(25), fGiaDV float
- Máy 1: mã khách hàng, tên khách hàng