一尘不染

多对多表设计问题

sql

最初,我的数据库中有两个表[Property]和[Employee]。

每个雇员可以有一个“家庭财产”,因此雇员表中有一个“财产”的HomePropertyID FK字段。

后来,我需要对这种情况进行建模,即尽管员工只有一个“房屋财产”,但确实在多个财产上工作或涵盖了多个财产。

因此,我创建了一个[Employee2Property]表,该表具有EmployeeID和PropertyID FK字段以对这种多对多关系进行建模。

现在,我发现我需要在员工和财产之间建立其他多对多关系。例如,如果有多名员工是某物业的经理,或者有多名员工在某物业执行维护工作,等等。

我的问题是:

  1. 我应该为这些情况中的每种情况创建单独的多对多表,还是仅创建一个表,例如[PropertyAssociatonType],该表列出了员工可以与属性建立的关联类型,并且只需向[Employee2Property]添加FK字段例如,PropertyAssociationTypeID可以解释什么是关联?我对优缺点或是否还有其他更好的方法感到好奇。
  2. 我是愚蠢的,这一切都错了吗?

感谢您的任何建议:)


阅读 168

收藏
2021-03-08

共1个答案

一尘不染

这是一个非常有效的问题。答案是:这取决于

以下内容建议使用单个“类型化” M:N关系:

  • 您通常想要处理所有与类型无关的员工-财产关系
  • 关联的数量一直在变化,即发明了新的类型。
  • 员工财产关系有时会更改其类型。

如果这些陈述是错误的然后是正确的,那么您最好使用单独的关系。

2021-03-08