MỤC LỤC
PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆN..................................................................2
I.
PHÁT BIỂU BÀI TOÁN............................................................................................3
II.
THIẾT KẾ CSDL MỨC KHÁI NIỆM – MÔ HÌNH ER...........................................4
1.
Xác định thực thể - thuộc tính và phân loại thuộc tính........................................4
2.
Xác định các liên kết và kiểu liên kết..................................................................4
3.
Mô hình ER...........................................................................................................5
III.
1.
THIẾT KẾ CSDL MỨC LOGIC – MÔ HÌNH QUAN HỆ.....................................6
Chuẩn hóa quan hệ...............................................................................................6
1.1.
Quy tắc chuyển đổi đối với mỗi thực thể....................................................6
1.2.
Quy tắc chuyển đổi đối với liên kết 1 –n.....................................................6
1.3.
Quy tắc chuyển đổi đối với liên kết n – m...................................................6
1.4.
Cơ sở dữ liệu cuối cùng................................................................................7
1.5.
Mô hình dữ liệu quan hệ................................................................................7
2.
Ràng buộc toàn vẹn..............................................................................................7
3.
Chuẩn hóa cơ sở dữ liệu......................................................................................9
IV.
THIẾT KẾ CSDL MỨC VẬT LÝ.........................................................................11
V.
KHAI THÁC CƠ SỞ DỮ LIỆU..............................................................................15
PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆN
STT
1
2
3
4
5
CÔNG VIỆC
Phát biểu bài toán
Thiết kế CSDL mức khái niệm – Mô hình ER
Ràng buộc toàn vẹn
Chuẩn hóa cơ sở dữ liệu
Thiết kế vật lý
NGƯỜI THỰC HIỆN
Bùi Ngọc Thắng
Ngô Hồng Quân
Vũ Văn Nam
Vũ Văn Nam
Ngô Hồng Quân
6
Khai thác cơ sở dữ liệu
Cả nhóm
2
I.
PHÁT BIỂU BÀI TOÁN
Khách sạn ABC mới bắt đầu đi vào hoạt động và c ần xây d ựng c ơ s ở d ữ li ệu đ ể
quản lý, gồm đặc tả ban đầu như sau:
Khách sạn quản lý các thông tin của khách hàng bao gồm: Tên khách hàng, gi ới tính,
địa chỉ, số điện thoại, số chứng minh thư nhân dân. Các khách hàng được phân bi ệt
thông qua số chứng minh thư nhân dân.
Khách sạn bao gồm nhiều phòng, mỗi phòng được lưu lại các thông tin: Mã phòng,
tên phòng, loại phòng, giá phòng và trạng thái hiện tại của phòng.Phòng gồm 3 loại là
phòng dành cho 4 người, phòng dành cho 6 người và phòng dành cho 10 ng ười. Các
phòng được phân biệt với nhau bởi mã phòng.
Khách hàng sau khi thuê phòng thì có thể sử dụng phòng trong thời hạn đã thuê. Một
khách hàng không thể cùng lúc sử dụng nhiều phòng, tuy nhiên một phòng có th ể cho
nhiều khách hàng cùng lúc sử dụng. Ngoài ra, khách hàng còn có đặt tr ước phòng v ới
thời hạn và số tiền đặc cọc theo quy định của khách sạn.
Ngoài ra, khách sạn còn hỗ trợ khách hàng s ử dụng các lo ại d ịch v ụ. D ịch v ụ đ ược
lưu trữ thông tin: Mã dịch vụ, tên dịch vụ và đơn giá của dịch vụ đó. Các d ịch vụ đ ược
phân biệt với nhau bởi mã dịch vụ.Khách hàng sử dụng dịch v ụ đ ều đ ược l ưu tr ữ lại
các thông tin cần thiết.
Mỗi khách hàng khi thuê phòng, sử dụng dịch vụ đều sẽ có hóa đơn đi kèm. Các hóa
đơn quản lý các thông tin ban đầu gồm: Mã hóa đơn, tên hóa đ ơn, ngày l ập, lo ại hóa
đơn và hình thức thanh toán hóa đơn. Khách hàng có thể thanh toán hóa đ ơn b ằng ti ền
mặt hoặc sử dụng quẹt thẻ. Hóa đơn này sẽ lưu trữ các thông tin cần thi ết v ề vi ệc
thuê phòng cũng như các loại dịch vụ mà khách hàng đã sử dụng.
3
II.
THIẾT KẾ CSDL MỨC KHÁI NIỆM – MÔ HÌNH ER
1. Xác định thực thể - thuộc tính và phân loại thuộc tính
-
KhachHang (Khách hàng): SoCMTND, TenKH, GioiTinh, DiaChi, SoDienThoai.
SoCMTND là thuộc tính khóa.
Phong (Phòng): MaPhong, TenPhong, LoaiPhong, GiaPhong, TrangThai.
MaPhong là thuộc tính khóa.
DichVu (Dịch vụ): MaDV, TenDV, DonGiaDV.
MaDV là thuộc tính khóa.
HoaDon (Hóa đơn): MaHD, NgayLap, LoaiHD, HinhThucTTHD.
1. MaHD là thuộc tính khóa.
2. Xác định các liên kết và kiểu liên kết
KhachHang
n
m
Tienda
toc
NgayDe
n
-
Lưu trữ: ngày đến, tiền đặt cọc.
KhachHang
m
n
Lưu trữ: ngày bắt đầu, ngày kết thúc.
KhachHang
-
n
sử
dụng
1
NgayK
T
m
DichVu
NgayS
D
Lưu trữ: ngày sử dụng.
KhachHang
Phong
thuê
NgayB
D
-
Phong
đặt
trước
có
4
n
HoaDon
3. Mô hình ER
Loại
phòng
Giá
phòng
Mã phòng
PHONG
Trạng
thái
n
n
Ngày
đến
Ngày KT
Bắt đầu
Đặt
Trước
Thu
ê
Ngày
SD
Tiền đặt
cọc
m
m
n
1
Số
CMTND
Số ĐT
Tên KH
Mã HD
Sử
Dụn
g
KHACHHANG
Có
Địa chỉ
Tên HĐ
Đơn giá
n
m
HOADON
Ngày
lập
Loại HĐ
Mã DV
DICHVU
Tên DV
Hình thức
TTHĐ
5
III. THIẾT KẾ CSDL MỨC LOGIC – MÔ HÌNH QUAN HỆ
1. Chuẩn hóa quan hệ
1.1. Quy tắc chuyển đổi đối với mỗi thực thể
(1) KhachHang (SoCMTND, TenKH, GioiTinh, DiaChi, SoDienThoai)
(2) Phong (MaPhong, LoaiPhong, GiaPhong, TrangThai)
(3) DichVu (MaDV, TenDV, DonGiaDV)
(4) HoaDon (MaHD, NgayLap, LoaiHD, HinhThucTTHD)
1.2.
Quy tắc chuyển đổi đối với liên kết m –n
KhachHang
n
m
Phong
đặt
trước
Tienda
toc
NgayDe
n
(5) DatPhong (SoCMTND, MaPhong, NgayDen, TienDat)
m
KhachHang
n
Phong
thuê
NgayB
D
NgayK
T
(6) ThuePhong (SoCMTND, MaPhong, NgayBD, NgayKT)
KhachHang
n
sử
dụng
m
DichVu
NgayS
D
(7)
1.3.
SuDungDV( MaKH, MaDV, NgaySD)
Quy tắc chuyển đổi đối với liên kết 1 – n
KhachHang
1
có
n
HoaDon
(4’) HoaDon (SoCMTND, NgayLap, LoaiHD, HinhThucTTHD, MaKH)
6
Cơ sở dữ liệu cuối cùng
(1)KhachHang (SoCMTND, TenKH, GioiTinh, DiaChi, SoDienThoai)
(2)Phong (MaPhong, LoaiPhong, GiaPhong, TrangThai)
(3)DichVu (MaDV, TenDV, DonGiaDV)
(4’)HoaDon(MaHD, NgayLap, LoaiHD, HinhThucTTHD, SoCMTND)
(5)DatPhong (SoCMTND, MaPhong, NgayDen, TienDat)
(6)ThuePhong (SoCMTND, MaPhong, NgayBD, NgayKT)
(7)SuDungDV(SoCMTND, MaDV, NgaySD)
1.4.
1.5. Mô hình dữ liệu quan hệ
KhachHang
SoCMTND
Phong
TenKH
GioiTinh
DiaChi
SoDienThoai
MaPhong
DichVu
TenPhong
LoaiPhong
GiaPhong
TrangThai
MaDV
TenDV
DonGiaDV
HoaDon
MaHD
NgayLap
LoaiHD
HinhThucTTH
D
SoCMTND
DatPhong
SoCMTND
ThuePhong
MaPhong
NgayDen
SoCMTND
SuDungDV
MaPhong
NgayBD
SoCMTND
MaDV
TienDatCoc
NgayKT
NgaySD
2. Ràng buộc toàn vẹn
● Ràng buộc: “Giới tính khách hàng chỉ có thể là nam hoặc nữ”
RBTV miền giá trị
- Bối cảnh: KhachHang
- Nội dung:
Tự nhiên: Giới tính khách hang chỉ có thể là nam hoặc nữ.
Hình thức: kh �KhachHang: kh.GioiTinh �{“Nam”, “Nữ”}
- Bảng tầm ảnh hưởng
KhachHang
Thêm
+(GioiTinh)
Xóa
7
Sửa
+(GioiTinh)
● Ràng buộc: “Hình thức thanh toán chỉ có thể là tiền mặt hoặc quẹt thẻ”
RBTV miền giá trị
- Bối cảnh: HoaDon
- Nội dung:
Tự nhiên: Hình thức thanh toán chỉ có thể là tiền mặt hoặc quẹt thẻ
Hình thức: x �HoaDon: x.HinhThucTTHD �{“Tien mat”, “Quet the”}
- Bảng tầm ảnh hưởng
HoaDon
Thêm
+(HinhThucTTHD)
Xóa
-
Sửa
+(HinhThucTTHD)
● Ràng buộc: “Ngày bắt đầu thuê phòng phải trước ngày kết thúc thuê phòng”
RBTV miền giá trị
- Bối cảnh: ThuePhong
- Nội dung:
Tự nhiên: ngày bắt đầu thuê phòng(NgayBD) phải trước ngày k ết thúc thuê
phòng(NgayKT)
Hình thức: tp �ThuePhong: tp.NgayBD< tp.NgayKT
- Bảng tầm ảnh hưởng
ThuePhong
Thêm
+
(NgayBD,NgayKT)
Xóa
-
Sửa
+( NgayBD,NgayKT)
● Ràng buộc:“Các phòng cùng loại thì có giá giống nhau”
RBTV miền giá trị
- Bối cảnh: Phong
- Nội dung:
Tự nhiên: Các phòng cùng loại thì có giá giống nhau.
Hình thức: p1,p2
p1.GiaPhong= p2.GiaPhong
- Bảng tầm ảnh hưởng
Phong
�Phong:
Thêm
+(LoaiPhong,
GiaPhong)
(p1.LoaiPhong= p2.LoaiPhong) →
Xóa
-
8
Sửa
+(LoaiPhong,
GiaPhong)
● Ràng buộc:“Phòng có thể cho 4 người , 6 người hoặc 10 người”
RBTV miền giá trị
- Bối cảnh: Phong
- Nội dung:
Tự nhiên: Phòng có thể cho 4 người, 6 người hoặc 10 người
Hình thức: x �Phong: x.LoaiPhong �{“4 nguoi”, “6 nguoi”, “10 nguoi”}
- Bảng tầm ảnh hưởng
Phong
Thêm
+(LoaiPhong)
Xóa
-
Sửa
+(LoaiPhong)
3. Chuẩn hóa cơ sở dữ liệu
1. KhachHang (SoCMTND, TenKH, GioiTinh, DiaChi, SoDienThoai)
F1 = {1. SoCMTND TenKH, GioiTinh, DiaChi, SoDienThoai}
Khóa: SoCMTND
Quan hệ ở dạng BCNF
Chuẩn hóa VI-1
SoCMTND
TenKH
GioiTinh
DiaChi
SoDienThoai
F1 = {SoCMTND TenKH, GioiTinh, DiaChi, SoDienThoai}
2. Phong(MaPhong, LoaiPhong, GiaPhong, TrangThai)
F2 = {1. MaPhong LoaiPhong, GiaPhong, TrangThai}
Khóa: MaPhong
Quan hệ ở dạng BCNF
Chuẩn hóa VI-2
MaPhong
LoaiPhong
GiaPhong
TrangThai
F2 = {MaPhong LoaiPhong, GiaPhong, TrangThai}
3. DichVu(MaDV, TenDV, DonGiaDV)
F3 = { 1. MaDV TenDV, DonGiaDV}
Khóa: MaDV
Quan hệ ở dạng BCNF
Chuẩn hóa VI-3
MaDV
TenDV
F3 = {MaDV TenDV, DonGiaDV}
9
DonGiaDV
4. HoaDon (MaHD, NgayLap, LoaiHD, HinhThucTTHD, SoCMTND)
F4 = {1. MaHD NgayLap, LoaiHD, HinhThucTTHD; 2.MaHD SoCMTND}
Khóa: MaHD, SoCMTND
Quan hệ ở dạng 3NF
Chuẩn hóa VI-4
MaHD
NgayLap
LoaiHD
HinhThucTTH
D
F4.1 = {MaHD, NgayLap, LoaiHD, HinhThucTTHD}
Chuẩn hóa VI-5
MaHD
SoCMTND
F4.2 = {MaHDSoCMTND}
5. DatPhong(SoCMTND, NgayDen, TienDatCoc)
F5 = {1. SoCMTND, NgayDen, TienDatCoc}
Khóa: SoCMTND
Quan hệ ở dạng BCNF
Chuẩn hóa VI-6
SoCMTND
NgayDen
F5 = {SoCMTND, NgayDen, TienDatCoc}
TienDatCoc
6. ThuePhong (SoCMTND, NgayBD, NgayKT)
F6 = {1. SoCMTNDNgayBD, NgayKT}
Khóa: SoCMTND
Quan hệ ở dạng BCNF
Chuẩn hóa VI-7
SoCMTND
NgayBD
F6 = {SoCMTNDNgayBD, NgayKT}
7. SuDungDV(SoCMTND, MaDV, NgaySD)
F8 = {1. SoCMTNDMaDV, NgaySD}
Khóa: SoCMTND
Quan hệ ở dạng BCNF
Chuẩn hóa VI-9
10
NgayKT
SoCMTND
IV.
MaDV
F8 = {SoCMTNDMaDV, NgaySD}
NgaySD
THIẾT KẾ CSDL MỨC VẬT LÝ
Tạo cơ sở dữ liệu QLThuePhongKhachSanvới các bảng và ràng buộc như sau:
KhachHang: Lưu thông tin các khách hàng.
Tên trường
Mô tả
SoCMTND
Số chứng minh khách hàng
TenKH
Tên khách hàng
GioiTinh
Giới tính
DiaChi
Địa chỉ
SoDienThoai
Số điện thoại
Kiểu dữ liệu
varchar(12)
varchar(50)
nvarchar(3)
varchar(100)
varchar(11)
Ràng buộc
Khóa chính
Phong: Lưu thông tin các phòng.
Tên trường
Mô tả
MaPhong
Mã phòng
TenPhong
Tên phòng
LoaiPhong
Loại phòng
GiaPhong
Giá phòng
TrangThai
Trạng thái phòng
Kiểu dữ liệu
varchar(12)
varchar(50)
varchar(30)
int
nvarchar(30)
Ràng buộc
Khóa chính
Dịch vụ: Lưu thông tin các dịch vụ.
Tên trường
Mô tả
MaDV
Mã dịch vụ
TenDV
Tên dịch vụ
DonGiaDV
Đơn giá dịch vụ
Kiểu dữ liệu
varchar(12)
varchar(50)
int
Ràng buộc
Khóa chính
HoaDon: Lưu thông tin các hóa đơn.
Tên trường
Mô tả
MaHD
Mã phòng
TenHD
Tên phòng
NgayLap
Loại phòng
LoaiHD
Giá phòng
HinhThucTTHD
Trạng thái phòng
SoCMTND
Số chứng minh khách hàng
Kiểu dữ liệu
varchar(12)
varchar(50)
smalldatetime
nvarchar(50)
nvarchar(50)
varchar(12)
Ràng buộc
Khóa chính
11
Khóa ngoại
DatPhong: Lưu thông tin đặt phòng của khách hàng.
Tên trường
Mô tả
Kiểu dữ liệu
SoCMTND
Số chứng minh khách hàng
varchar(12)
NgayDen
Ngày đến
smalldatetime
TienDatCoc
Tiền đặt cọc
int
ThuePhong: Lưu thông tin thuê phòng của khách hàng.
Tên trường
Mô tả
Kiểu dữ liệu
SoCMTND
Số chứng minh khách hàng
varchar(12)
NgayBD
Ngày bắt đầu
smalldatetime
NgayKT
Ngày kết thúc
smalldatetime
SuDungDV: Lưu thông tin sử dụng dịch vụ của khách hàng.
Tên trường
Mô tả
Kiểu dữ liệu
SoCMTND
Số chứng minh khách hàng
varchar(12)
MaDV
Mã dịch vụ
varchar(12)
NgaySD
Ngày sử dụng
smalldatetime
Phần mềm sử dụng: Microsoft Access
Database QLThuePhongKhachSan sau khi được tạo thành công.
12
Ràng buộc
Khóa chính
Ràng buộc
Khóa chính
Ràng buộc
Khóa chính
Khóa chính
Thực hiện thêm dữ liệu cho bảng KhachHang:
Thực hiện thêm dữ liệu cho bảng Phong:
13
Thực hiện thêm dữ liệu cho bảng DichVu:
Lưu trữ thông tin khách hàng đã đặt phòng trong bảng DatPhong:
Lưu trữ thông tin khách hàng đã thuê phòng trong bảng ThuePhong:
Lưu trữ thông tin khách hàng đã sử dụng dịch vụ trong bảng SuDungDV:
V.
KHAI THÁC CƠ SỞ DỮ LIỆU
1. Lấy dữ liệu từ 1 bảng
a.Nội dung phát biểu:Đưa ra toàn bộ thông tin khách hàng có địa chỉ ở “Ha Noi”.
Đại số quan hệ: ∂DiaChi= ‘Ha Noi’ (KhachHang)
Thực hiện:
14
Kết quả:
b.Nội dung phát biểu:Đưa ra toàn bộ thông tin dịch vụ có đơn giá lớn hơn 30000.
Đại số quan hệ:
∂DonGiaDV>30000 (DichVu)
Thực hiện:
Kết quả:
c.Nội dung phát biểu:Đưa ra toàn bộ thông tin các phòng dành cho 10 người.
Đại số quan hệ:
∂LoaiPhong=’10 nguoi’ (Phong)
Thực hiện: SELECT * FROM Phong WHERE LoaiPhong= ’10 nguoi’
Kết quả:
15
d.Nội dung phát biểu:Đưa ra toàn bộ thông tin khách hàng có giới tính là ‘Nam’.
Đại số quan hệ:
∂GioiTinh= ‘Nam’ (KhachHang)
Thực hiện:
Kết quả:
2. Lấy dữ liệu từ 2 bảng:
a.Nội dung phát biểu: In ra tên khách hàng và mã hóa đơn của khách hàng đó
Đại số quan hệ: πTenKH,MaHD(KhachHangSoCMTND*HoaDon)
Thực Hiện: SELECT tenKH, maHD
FROM KhachHang, HoaDon
WHERE KhachHang.SoCMTND=HoaDon.SoCMTND
Kết quả:
b. Nội dung phát biểu: Đưa ra tên khách hàng , ngày bắt đầu và ngày kết thúc
Đại số quan hệ: πtenKH,ngayBD,ngayKT(KHACHHANGSoCMTND*ThuePhong)
Thực Hiện: SELECT TenKH,NgayBD,NgayKT
FROM THUEPHONG,KHACHHANG
WHERE THUEPHONG.SoCMTND=KHACHHANG.SoCMTND;
Kết quả:
16
c.Nội dung phát biểu: Đưa ra ngày sử dụng, số cmnd và tên dịch vụ
Đại số quan hệ: πNgaySD,SoCMTND,tenDV(SudungDVSoCMTND*KhachHang)
Thực Hiện:
SELECT KHACHHANG.SoCMTND,DICHVU.TenDV,SUDUNGDV.NgaySD
FROM KHACHHANG INNER JOIN(DICHVU INNER JOIN SUDUNGDV ON
DICHVU.MaDV=SUDUNGDV.MaDV)
ON
KHACHHANG.SoCMTND=SUDUNGDV.SoCMTND;
Kết quả:
d.Nội dung phát biểu: Đưa ra số điện thoại, loại hóa đơn
Đại số quan hệ: πSĐT,loaiHD(KhachHangSoCMTND*HoaDon)
Thực Hiện: SELECT SoDienThoai, LoaiHD
Kết quả:
FROM KhachHang, HoaDon
WHERE KhachHang.SoCMTND=HoaDon.SoCMTND
e.Nội dung phát biểu: Đưa ra tên khách hàng, ngày sử dụng
Đại số quan hệ: πTenKH,NgaySD(SuDungDVSoCMTND*KhachHang)
Thực Hiện:
SELECT TenKH, NgaySD
17
FROM KhachHang, SudungDV
WHERE SudungDV.SoCMTND=KhachHang.SoCMTND
Kết quả:
3. Yêu cầu tính toán từ 1 bảng
a.Nội dung phát biểu: Đếm số hóa đơn
Đại số quan hệ:
Ʈcount(MaHD) as ”số hóa đơn” (HoaDon)
Thực Hiện:
SELECT COUNT(MaHD) as “SoHoaDon”
FROM HoaDon
Kết quả:
b.Nội dung phát biểu: Đưa ra giá dịch vụ cao nhất
Đại số quan hệ: (∂max(DonGiaDV”đơn giá DV”(DichVu)
Thực Hiện:
SELECT max(DonGiaDV) as “GiaDVCaoNhat”
FROM DichVu
Kết quả:
c.Nội dung phát biểu: Đưa ra giá phòng cao nhất
Đại số quan hệ:
Thực Hiện:
∂max(DonGiaDV”đơn giá DV”(DichVu)
SELECT Max(GiaPhong) as “GiaPhongMax”
FROM Phong
Kết quả:
18
d.Nội dung phát biểu: Đếm số tên khách hàng
Đại số quan hệ:
Ʈcount(TenKH) as ”số khách hàng” (KhachHang)
Thực Hiện:
SELECT COUNT(TenKH) as “SoKhachHang”
FROM KhachHang
Kết quả:
e.Nội dung phát biểu: Đếm số loại hóa đơn
Đại số quan hệ:
Ʈcount(LoaiHD) as ”số loại hóa đơn” (HoaDon)
Thực Hiện:
SELECT COUNT(LoaiHD) as “SoHoaDon”
FROM HoaDon
Kết quả:
4. Yêu cầu tính toán từ 2 bảng
a.Nội dung phát biểu : Đếm số khách hàng đang sử dụng phòng 5
Đại số quan hệ: ΠTenPhong(δMaPhong=’5’(KhachHang*SuDungPhong*Phong))
SoCMTND
Thực Hiện:
Kết quả:
19
MaPhong
b.Nội dung phát biểu : Đếm số khách hàng đang sử dụng dịch vụ 03
Đại số quan hệ: ΠTenDV(δMaDV=’ 3’(KhachHang*SuDungDV*DichVu))
SoCMTND
Thực Hiện:
MaDV
SELECT dv.TenDV, count(kh.SoCMTND) as "So Khach Hang"
FROM KhachHang as kh INNER JOIN SuDungDV as sddv
ON kh.SoCMTND = sddv.SoCMTND
INNER JOIN DichVu as dv ON dv.MaDV = sddv.MaDV
WHERE dv.MaDV = '3'
GROUP BY dv.TenDV
Kết quả:
c. Nội dung phát biểu : Đếm số lượng khách hàng thanh toán bằng quẹt thẻ
Đại số quan hệ: δHinhThucTTHD=’Quet the’(KhachHang*HoaDon))
SoCMTND
Thực Hiện:
SELECT COUNT(KhachHang.SoCMTND) as CountofSoCMTND
FROM KHACHHANG INNER JOIN HOADON ON
KHACHHANG.SoCMTND = HOADON.SoCMTND
GROUP BY HOADON.HinhThucTTHD
HAVING (((HOADON.HinhThucTTHD)="a"));
Kết quả:
20