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

database modeling with multiple many-to-many relations

我有 3 个实体

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

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

ID | Address_ID | Worker_ID | Student_ID

其中ID是PK和Worker_IDStudent_ID 可以为 null

或 2 table 像这样:

Address_ID | Worker_ID

PK 是 Address_IDWorker_ID

Address_ID | Student_ID

PK 是 Address_ID 和 Student_ID

哪个选项最好,为什么?

提前致谢。

首先:建模技术不好:

Each address can be the address of x students and y workers

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

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

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

第三种:我提供第三种方法。
您有 WorkerStudent table。所以这些 table 绝对具有 共同属性 。因此,您可以创建另一个 table 并将其命名为:Person。然后将所有公共属性放入其中。然后你可以将 PersonAddress 联系起来(多对多或一对多)

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

我有一些问题。

为什么你决定做一个地址 table?

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

您可以将地址用作字符串字段。在数据库设计中,我们在某些情况下将多字段字段更改为table。重要的条件是搜索的字段太多了。

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