繁体   English   中英

数据库设计中的多关系问题

[英]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 但是我无法显示员工姓名。 (如果需要显示预订会议室的员工的姓名,我是否应该更改查询/设计以适应此要求?

注意:在数据库设计中, Employeebooking有直接关系,因为员工可以预订会议。 此外, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM