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

问题描述 投票:1回答:2

我有3个实体

  • 工作人员
  • 学生们
  • 地址

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

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

ID | Address_ID | Worker_ID | Student_ID

其中ID是PK,Worker_ID或Student_ID可以为null

或者像这样的2个表:

Address_ID | Worker_ID

PK是Address_ID和Worker_ID

Address_ID | Student_ID

PK是Address_ID和Student_ID

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

提前致谢。

sql database database-design entity data-modeling
2个回答
3
投票

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

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

没有必要将Address指定为两个或更多StudentsWorkers。如果他们有相同的Address你可以重复Address。请注意:有多少学生和工人拥有相同的地址?

在这种情况下:冗余比复杂性更好。

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

第三:我提供第三种方法。 你有WorkerStudent表。所以这些表绝对具有共同属性。所以你可以创建另一个名为它的表:Person。然后将所有常见属性放入其中。然后你可以将PersonAddress(多对多或一对多)联系起来

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


0
投票

我有一些问题。

为什么你决定制作一个地址表?

您系统中有多少次搜索基于地址字段?

您可以使用Address作为String字段。在数据库设计中,我们在某些条件下将多字段字段更改为表。重要的条件是搜索领域是如此之多。

例如,在邮政系统或电话或地址查找系统中,而不是在常规系统中。

© www.soinside.com 2019 - 2024. All rights reserved.