Hỏi về phần hóa đơn (ERD)

Mọi người ơi cho mình hỏi 1 chút, mình đang làm bài tập về nhà về vẽ sơ đồ ERD như sau"

Hệ thống cho thuê phòng tổ chức sự kiện
Thông tin về phòng gồm mã phòng, loại phòng (phòng thường, phòng vip) , sức chứa
Thông tin về người thuê bao gồm mã người thuê, tên, cmnd,… thông tin của mỗi lần thuê phòng gồm vị trí thuê, thời gian bắt đầu, thời gian kết thúc.
Trong mỗi lần thuê, người thuê có thể có thêm các yêu cầu về dịch vụ (vệ sĩ, chương trình ca múa nhạc, ăn giữa tiệc), giá tiền của dịch vụ, người thuê phải trả thêm tiền cho các dịch vụ này.
Mỗi khách phải trả tiền cho khách sạn, thông tin về một lần thanh toán gồm
ngày thanh toán, số tiền phòng và số tiền dịch vụ."

Vậy chỗ thực thể hóa đơn thì em nối như thế này có hợp lý ko ạ
cái thứ 2 là: vì “thực thể dịch vụ” là thực thể yếu (phụ thuộc vào phòng, nếu thuê phòng mới dùng được dịch vụ thì mình nối từ dịch vụ sang “thực thể phòng” như thế nào ạ

mình thấy quan hệ giữa KháchPhòng phải là n:n, 1 phòng có thể được người khác thuê nữa chứ (ko trùng quãng thời gian thuê).

nếu là n:n thì Thuê sẽ là 1 table riêng. Thuê sẽ tạo ra nhiều hóa đơn. 1 hóa đơn chỉ có 1 id của Thuê như vậy là 1 Thuê nhiều HóaĐơn. Các DịchVụ thêm vào sẽ cần có 1 id của Thuê luôn (1 Thuê n DịchVụ). Làm như vậy thì có thể coi thuê phòng cũng là 1 dịch vụ. Tính toán hóa đơn dễ dàng, chỉ có lúc đặt phòng là phải kiểm tra trong bảng Thuê sao cho ko bị trùng thôi.

Thuê yêu cầu phải có id của KháchPhòng nên dịch vụ cần có id của Thuê nghĩa là thỏa mãn yêu cầu “nếu thuê phòng mới dùng được dịch vụ”.

1 Like

Hi bạn, vậy là “thuê dịch vụ” (mình gọi là “sử dụng dịch vụ” đi cho đỡ lộn) là mình đưa luôn cái id_phòng vô luôn hả bạn hay là phải tạo thêm liên kết từ Phòng đến “sử dụng dịch vụ”

đưa cái id của Thuê ấy. Thuê (rent) tuy là 1 relation nhưng nó là n:n relation nên là 1 table riêng. Mỗi table đều có 1 primary key là integer cho nó khỏe. Trong ERD thì Rent có primary key là key từ Khách và key từ Phòng: Rent có primary key là rid (integer), khóa ngoại tới Kháchcid, khóa ngoại tới Phòngroomid. Coi cái Rent này như là tổng hợp của Khách và Phòng vậy. Có rid thì có thể truy ra chính xác cid của khách thuê phòng, có thể truy ra roomid của phòng.

1 dịch vụ có thể được nhiều Rent sử dụng, 1 Rent cũng có thể sử dụng lại 1 dịch vụ nhiều lần. Vậy là n:n relationship luôn. Gọi relation này là Use Service trong ERD, nhưng khi chuyển thành sql table thì gọi là ServiceOrder. Mỗi ServiceOrder cần có 2 khóa ngoại tới Service ví dụ là sidRent. vd là rid.

1 Like

Mình cảm ơn bạn nhiều

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?