我是数据库设计的新手,现在我需要开发一个数据库来存储会议信息。基本上,要求是我们有会议室,我们的员工可以预订会议室,他们可以为这些会议指定参与者。
参与者也是员工 预订会议室的员工可能是也可能不是参与者 在预订中,我们必须存储其他信息,如开始时间,结束时间和会议名称。 员工可以预订任意数量的会议 对于会议,可以有一个或多个参与者
以下是针对上述要求提出的数据库图表......
问题01:此设计中是否存在任何问题?
现在,如果我想查询数据库以获取以下详细信息......
......我可以写......
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
。但我无法显示员工姓名。 (如果我需要显示预订会议室的员工的姓名)我应该更改查询/设计以满足此要求吗?
注意:在数据库设计中,Employee
与booking
有直接关系,因为员工可以预订会议。此外,employee
与booking
到Participation
还有另一种关系,因为员工可以在预订后参加会议。
答案 0 :(得分:1)
问题1:如果我正确地阅读您的设计,请预订.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