Thuộc tính: MA_NV, TEN_NV, DIAHI, CHUCVU, CCCD.1.2 tiếp theo là về Mối quan hệ giữa các thực thể Ví dụ như- Quan hệ PHONG – KHACHHANG: nhiều khách hang có thể đặt nhiều phong hoặc không
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
================
BÁO CÁO BÀI TẬP LỚN
Môn học: Cơ sở dữ liệu
Thành
viên:
Nguyễn Hoàng Nam - B20DCVT262
Lê Đình Thanh - B20DCVT357
Hà Viết Mạnh Quốc - B20DCVT309 Đào Ngọc An - B20DCVT006
Nhóm: 02.
Giảng viên: Vũ Thị Thúy Hà.
Trang 2Hà Nội 2023
MỤC LỤC
Thưa cô giáo và các bạn, nhóm 13 chúng em xin phép được báo cáo về chủ đề xây dựng hệ cơ sở
dữ liệu quản lí khách sạn đơn giản
Báo cáo được chia làm 6 phần bao gồm:
I Kịch bản hệ cơ sở dữ liệu.
II Thiết kế lược đồ
ERD……….4
III Chuyển lược đồ ERD sang lược đồ quan
hệ……… 5
IV Chuẩn hóa các lược đồ quan hệ 1NF, 2NF,
3NF………5
V Khởi tạo cơ sở dữ liệu trên MySQL
workbench……… 7
VI Một số ví dụ về truy vấn cơ sở dữ liệu trên
MySQL
workbench………
……….15
Đi vào phần thứ nhất là:
Trang 3I Kịch bản hệ cơ sở dữ liệu
Bọn e chia được ra làm 5 thực thể, ứng với mỗi thực thể là các thuộc tính riêng biệt
Thực thể : KHACHHANG
Thuộc tính : MA_KH, TEN_KH, CCCD, SDT, DIACHI
Thực thể: PHONG
Thuộc tính: MA_P , TEN_P, GIA, LOAI_P.
Thực thể : DICHVU
Thuộc tính: MA_DV , TEN_DV, GIA
Thực thể: HOADON
Thuộc tính: MA_HD, NGAYTT, TEN_HD, MA_KH,
THANHTIEN
Thực thể: NHANVIEN
Thuộc tính: MA_NV, TEN_NV, DIAHI, CHUCVU, CCCD.
1.2 tiếp theo là về Mối quan hệ giữa các thực thể
Ví dụ như
- Quan hệ PHONG – KHACHHANG: nhiều khách hang có
thể đặt nhiều phong hoặc không có khách hàng đặt phòng
- Quan hệ PHONG – NHÂN VIÊN : nhiều nhân viên quản
lí mỗi phòng
- Quan hệ NHANVIEN-HOADON : nhiều nhân viên tạo ra
môt hóa đơn, một hóa đơn được tạo bởi một nhân viên
- Quan hệ KHACHHANG – HOADON: mỗi khách hàng có
một hóa đơn, nhiều khách hàng có một hóa đơn
Trang 4- Quan hệ KHACHHANG – DICHVU: nhiều khách hàng
yêu cầu nhiều dịch vụ, không có khách hàng nào yêu câu dịch vụ
Và gắn với đó là các ràng buộc
VI.1 Các ràng buộc:
Thứ nhất là
o Ràng buộc duy nhất cho MA_KH, MA_HD, MA_P, MA_DV, MA_NV
Thứ hai là
o Ràng buộc kiểm tra căn cước công dân của nhân viên
o Ràng buộc kiểm tra căn cước công dân của khách hàng
o Ràng buộc kiểm tra thành tiền của hóa đơn: đảm bảo rằng thành tiền phải có giá trị dương
o Ràng buộc kiểm tra loại phòng :đảm bảo loại phòng phải đúng
Tiếp theo đi vào phần 2, bọn e có thiết kế một Lược đồ ERD gồm 5 thực thể và 4 kiểu liên kết 2 ngôi có thuộc tính
Trang 5II Thiết kế lược đồ ERD.
III Chuyển lược đồ ERD sang lược đồ quan hệ.
Trang 6IV Chuẩn hóa các lược đồ quan hệ về dạng
chuẩn1NF, 2NF, 3NF.
4.1 PHONG(MA_P, TEN_P, GIA, LOAI_P)
Khóa chính (MA_P)
F1 = {MA_P -> TEN_P , MA_P -> TEN_P, MA_P ->GIA, MA_P ->LOAI_P}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyê tố: lược
đồ ở dạng chuẩn 1NF
Mọi thuộc tính không khóa đều phụ thuộc hàm đầy đủ vào khóa chính là MA_P: Lược đồ ở dạng chuẩn 2NF
Mọi thuộc tính không khóa đều phụ thuộc hàm trực tiếp vào khóa chính không bắc cầu thông qua một thuộc tính khác: Lược đồ ở dạng chuẩn 3NF
Trang 74.2 KHACHHANG(MA_KH, DIACHI,
TEN_KH,CCCD,SDT)
Khóa chính(MA_KH)
F2={MA_KH -> DIACHI, MA_KH ->TEN_KH, MA_KH ->CCCD, MA_KH ->SDT}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyê tố: lược đồ ở dạng chuẩn 1NF
Mọi thuộc tính không khóa đều phụ thuộc hàm đầy đủ vào khóa chính là MA_KH: Lược đồ ở dạng chuẩn 2NF
Mọi thuộc tính không khóa đều phụ thuộc hàm trực tiếp vào khóa chính không bắc cầu thông qua một thuộc tính khác: Lược đồ ở dạng chuẩn 3NF
4.3 DICHVU(GIA,TEN_DV, MA_DV).
Khóa chính(MA_DV)
F3={MA_DV -> GIA, MA_DV ->TEN_DV}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyê tố: lược đồ ở dạng chuẩn 1NF
Mọi thuộc tính không khóa đều phụ thuộc hàm đầy đủ vào khóa chính là MA_DV: Lược đồ ở dạng chuẩn 2NF
Mọi thuộc tính không khóa đều phụ thuộc hàm trực tiếp vào khóa chính không bắc cầu thông qua một thuộc tính khác: Lược đồ ở dạng chuẩn 3NF
4.4 HOADON(MA_HD, TEN_HD, NGAYTT,
THANHTIEN,MA_KH)
Khóa chính(MA_HD)
F4={MA_HD -> TEN_HD, MA_HD ->NGAYTT,
MA_HD -> THANHTIEN, MA_HD -> MA_KH}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyê tố: lược đồ ở dạng chuẩn 1NF
Trang 8 Thuộc tính TEN_HD, NGAYTT, THANHTIEN,MA_KH đều phụ thuộc hàm đầy đủ vào khóa chính là MA_HD: Lược đồ ở dạng chuẩn 2NF
Mọi thuộc tính không khóa đều phụ thuộc hàm trực tiếp vào khóa chính không bắc cầu thông qua một thuộc tính khác: Lược đồ ở dạng chuẩn 3NF
4.5 HOADON(MA_HD, TEN_HD, NGAYTT,
THANHTIEN,MA_KH)
Khóa chính: MA_NV
F5={MA_NV ->TEN_NV, MA_NV ->DIACHI, MA_NV ->CHUCVU, MA_NV -> CCCD}
Lược đồ quan hệ chỉ chứa các thuộc tính nguyê tố: lược đồ ở dạng chuẩn 1NF
Mọi thuộc tính không khóa đều phụ thuộc hàm đầy đủ vào khóa chính là MA_NV: Lược đồ ở dạng chuẩn 2NF
Mọi thuộc tính không khóa đều phụ thuộc hàm trực tiếp vào khóa chính không bắc cầu thông qua một thuộc tính khác: Lược đồ ở dạng chuẩn 3NF
5 Khởi tạo cơ sở dữ liệu trên MySQL workbench.
Tạo và sử dụng cơ sở dữ liệu.
Tạo bảng quản lý.
Trang 9 Tạo bảng KHACHHANG.
Tạo bảng DICHVU.
Trang 10 Tạo bảng HOADON.
Tạo bảng NHANVIEN.
Trang 11 Tạo bảng Phong.
Tạo bảng QUANLY.
Trang 12 Tạo bảng TAO.
Tạo bảng YEUCAU.
Trang 13 Tạo bảng DAT.
Trang 14Code: ALTER TABLE NHANVIEN
ADD COLUMN DIENTHOAI VARCHAR(20);
Mở độ rộng cho cột DIENTHOAI để có thể lữu số điện thoại có cả mã vùng và số máy nội bộ.
Code:
ALTER TABLE NHANVIEN
MODIFY COLUMN DIENTHOAI VARCHAR(50);
Tạo thêm index cho cột DIENTHOAI của bảng
NHANVIEN.
Code:
CREATE INDEX idx_dienthoai_nhanvien ON NHANVIEN (DIENTHOAI);
Tạo một view chỉ hiển thị ‘MANV’, ‘TENNV’,
‘DIENTHOAI’ trong bảng NHANVIEN.
Code:
Tạo một view trong bảng NHANVIEN
CREATE VIEW view_nhanvien AS
SELECT MANV, TENNV, DIENTHOAI
FROM NHANVIEN;
Trang 15 Cập nhât số điện thoại them vào đầu mỗi sô chuỗi
‘+84’.
Code:
UPDATE NHANVIEN
SET DIENTHOAI = CONCAT('+84', DIENTHOAI);
Cập nhật số điện thoại thêm vào đầu mỗi số chuỗi
‘+84’ Nếu số điện thoại đã có mã quốc tế thì
không được thêm vào nữa.
Code:
UPDATE NHANVIEN
SET DIENTHOAI = CONCAT('+84', DIENTHOAI)
WHERE DIENTHOAI NOT LIKE '+%';
Tìm nhân viên trong TENNV có chữ “A”.
Code:
SELECT * FROM NHANVIEN
WHERE TENNV LIKE '%A%';
Trang 16 Tìm tên trùng nhau trong bảng NHANVIEN.
Code:
SELECT TENNV, COUNT(*) AS SoLuong
FROM NHANVIEN
GROUP BY TENNV
HAVING COUNT(*) > 1;
Một số ví dụ về truy vấn cơ sở dữ liệu trên MySQL
workbench
Trang 17 Hiển thị danh sách phòng.
Code: SELECT * FROM PHONG;
Hiển thị danh sách tất cả các nhân viên và chức vụ của họ
Code: SELECT TENNV, CHUCVU
FROM NHANVIEN;
Hiển thị danh sách thông tin các khách hàng và thông tin đặt phòng của họ
Code:
SELECT KHACHHANG.TENKH, DAT.NGAYDEN, DAT.NGAYDI, PHONG.TENP
Trang 18JOIN DAT ON KHACHHANG.MAKH = DAT.KHACHHANG_MAKH
JOIN PHONG ON DAT.PHONG_MAP = PHONG.MAP;
Tổng doanh thu từ các hóa đơn:
Code:
SELECT SUM(THANHTIEN) AS TongDoanhThu
FROM HOADON;
Trang 19 Danh sách các dịch vụ được yêu cầu và số lượng:
Code:
SELECT DICHVU.TEN_DV, YEUCAU.SOLUONG
FROM DICHVU
JOIN YEUCAU ON DICHVU.MADV = YEUCAU.DICHVU_MADV
Danh sách các phòng có tình trạng “Trống’’ :
Code:
SELECT PHONG.TENP, QUANLY.TINHTRANG
FROM PHONG
JOIN QUANLY ON PHONG.MAP = QUANLY.PHONG_MAP
WHERE QUANLY.TINHTRANG = 'Trống';