2014-11-22 56 views
0

我是數據庫設計的新手,現在我需要開發數據庫來存儲會議信息。基本上,要求是我們有會議室,我們的員工可以預訂會議室,他們可以指定參加這些會議的人員。數據庫設計中的多重關係問題

參與者也是僱員 誰訂一間會議室可能會或可能不會是一個參與者 在預訂,我們必須像存儲開始時間,結束時間和會議名稱等信息的員工。 僱員可以預訂任意數量的會議 對於一個會議可以有一個或多個參與者

以下是提出了上述要求數據庫圖表...

enter image description here

問題01:這個設計有什麼問題嗎?

現在,如果我想查詢數據庫得到以下細節...

enter image description here

...我可以寫...

SELECT MeetingRoom.name AS 'Room Name',Booking.name AS 'Meeting Name',Booking.user_id AS 'Booked By',Booking.start_time, 
Participation.user_id AS 'Participant ID',Employee.name AS 'Participant Name' 
FROM MeetingRoom LEFT JOIN Booking ON MeetingRoom.room_id = Booking.room_id 
LEFT JOIN Participation ON Booking.booking_id= Participation.booking_id 
LEFT JOIN Employee ON Participation.user_id = Employee.employee_id 

問題02:booked by列我只顯示employee_id。但我無法顯示員工姓名。 (如果我需要顯示預訂會議室的員工姓名)我是否應該更改查詢/設計以滿足此要求?

注意:在數據庫設計中,Employeebooking有直接關係,因爲員工可以預定會議。 employeebookingParticipation有另一種關係,因爲員工可以參加一次預訂的會議。

+1

我認爲'Employee'和'Booking'之間沒有必然的關係。你應該從'Booking'中刪除'user_id'。 – 2014-11-22 07:31:02

回答

1

問題1:如果我正在閱讀您的設計權限,則爲booking.user_id = employee.employee_id。如果是這樣,請將其重命名爲booking.employee_id,以便更容易地知道它來自哪裏。

問題2:您可以在查詢中多次連接到同一個表。使用別名來區分這兩種表格用法,如下所示:

SELECT MeetingRoom.name AS 'Room Name',Booking.name AS 'Meeting Name',Booking.user_id AS 'Booked By ID', Booker.name as 'Booked By Name', Booking.start_time, 
Participation.user_id AS 'Participant ID',Employee.name AS 'Participant Name' 
FROM MeetingRoom LEFT JOIN Booking ON MeetingRoom.room_id = Booking.room_id 
JOIN Employee as Booker ON MeetingRoom.User_ID = Booker.employee_ID 
LEFT JOIN Participation ON Booking.booking_id= Participation.booking_id 
LEFT JOIN Employee ON Participation.user_id = Employee.employee_id