[英]Multi relationship issue in a database design
我是数据库设计的新手,现在我需要开发一个数据库来存储会议信息。 基本上,要求是我们有会议室,我们的员工可以预定会议室,他们可以指定这些会议的参与者。
参与者也是员工预定会议室的员工可能是参与者,也可能不是参与者。在预订中,我们必须存储其他信息,例如会议开始时间,结束时间和会议名称。 员工可以预订任何数量的会议。对于一个会议,可以有一个或多个参与者
以下是针对上述要求建议的数据库图...
问题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
与通过Participation
进行booking
还有另一种关系,因为员工一旦预订即可参加会议。
问题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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.