2014-11-22 89 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