具有多个多对多关系的数据库建模

Bla*_*rix 2 sql database database-design entity data-modeling

我有 3 个实体

  • 工人
  • 学生们
  • 地址

每个工人可以有多个地址。每个学生可以有多个地址。每个地址可以是 x 个学生和 y 个工人的地址。

我的问题是,最好的数据建模是什么样的。仅在一个关联表中实现多对多关系,如下所示:

ID | Address_ID | Worker_ID | Student_ID
Run Code Online (Sandbox Code Playgroud)

其中ID是 PK 并且Worker_IDStudent_ID可以为空

或像这样的 2 个表:

Address_ID | Worker_ID
Run Code Online (Sandbox Code Playgroud)

PK 是Address_IDWorker_ID

Address_ID | Student_ID
Run Code Online (Sandbox Code Playgroud)

PK 是Address_I D 和Student_ID

哪个选项是最好的,也许为什么?

提前致谢。

Gho*_*ani 5

首先:这不是很好的建模技术:

每个地址可以是x个学生和y个工人的地址

不需要指定一个Address到两个或多个StudentsWorkers。如果它们相同,Address您可以重复Address. 注意:有多少学生和工人有相同的地址?

在这种情况下冗余优于复杂性

其次:您的第一种方法是错误的(ID | Address_ID | Worker_ID | Student_ID)并在数据库中制作了一个Nullification陷阱。你的第二种方法更好。

第三:我提供第三种方法。
你有WorkerStudent表。所以绝对这些表有共同的属性。所以你可以制作另一个名为它的表:Person。然后把所有常见的属性都放进去。然后,你可以涉及PersonAddress(许多一对多或一对一许多)

在这种情况下,WorkerPerson(和StudentPerson)之间存在继承。要将继承映射到关系模型,可以使用WorkerPerson(和StudentPerson)之间的一对一关系。在这些一对一的关系中,最好转移Person_IDWorker(和Person_IDStudent)。