数据库设计与其他表的多对多关系

时间:2013-12-10 13:03:46

标签: sql database

假设我有员工&会议桌。

Employee
-----------
id
name


Meeting
-----------
id
name


Employee_Meeting
-----------
id
employee_id
meeting_id

现在我需要在该会议中添加员工的任务(或其他任何内容)。这样做的最佳做法是什么?我可以有这样的关系:

Employee_Meeting_Task
-----------
Employee_Meeting_id
task_id

Employee_Tasks
-----------
id
employee_id
meeting_id
task_id

这两种方法从“正确的”数据库设计的角度来看是否有效?

我担心的是:

案例1:大部分时间如果我从会议中删除员工,我也需要在会议中删除他的任务。 Employee_Meeting_Task将通过约束强制执行。

案例2:员工有时参加某些日常会议,并定期在该会议中执行相同的任务。如果他生病了几天,我想将他从会议中删除,但我不想在下次参加会议时将他的任务重新添加到会议中。

1 个答案:

答案 0 :(得分:1)

您应该注意几件事。首先,如果员工有可能拥有与会议无关的任务,您可能会遇到麻烦。其中一种方法是在会议桌中创建一个名称为“不适用”的记录。另一种方法是从employee_tasks表中取出meeting_id字段。最好的方法取决于将任务与会议相关联的要求,这是您必须询问您的任务主管的事情。

接下来,对于多对多的表,您不需要单独的id字段。例如,对于employee_meeting,PK可以是employee_id和meeting_id。

接下来,看一下您对案例2所说的内容。如果有每日会议,那么每天会议表中不会有一条记录吗?