具有多个多对多关系的数据库建模
database modeling with multiple many-to-many relations
我有 3 个实体
- 工人
- 学生
- 地址
每个工人可以有多个地址。每个学生可以有多个地址。每个地址可以是x个学生和y个工人的地址。
我的问题是,最好的数据建模是什么样的。仅在一个关联 table 中实现多对多关系,如下所示:
ID | Address_ID | Worker_ID | Student_ID
其中ID是PK和Worker_ID或Student_ID 可以为 null
或 2 table 像这样:
Address_ID | Worker_ID
PK 是 Address_ID 和 Worker_ID
和
Address_ID | Student_ID
PK 是 Address_ID 和 Student_ID
哪个选项最好,为什么?
提前致谢。
首先:建模技术不好:
Each address can be the address of x students and y workers
不需要指定一个Address
到两个或多个Students
或Workers
。如果他们有相同的 Address
你可以重复 Address
。 注意:有多少学生和工人有相同的地址?
在这种情况下:冗余优于复杂性。
其次:你的第一种方法是错误的(ID | Address_ID | Worker_ID | Student_ID
)并在数据库中制造了一个Nullification陷阱。你的第二种方法更好。
第三种:我提供第三种方法。
您有 Worker
和 Student
table。所以这些 table 绝对具有 共同属性 。因此,您可以创建另一个 table 并将其命名为:Person
。然后将所有公共属性放入其中。然后你可以将 Person
与 Address
联系起来(多对多或一对多)
在这种情况下,Worker
和 Person
(以及 Student
和 Person
)之间存在继承关系。要 将继承映射到关系模型 ,您可以在 Worker
和 Person
(以及 Student
和 Person
).在这些一对一关系中,最好将 Person_ID
转移到 Worker
(以及 Person_ID
转移到 Student
)。
我有一些问题。
为什么你决定做一个地址 table?
您系统中有多少搜索是基于地址字段的?
您可以将地址用作字符串字段。在数据库设计中,我们在某些情况下将多字段字段更改为table。重要的条件是搜索的字段太多了。
例如在 Post 系统或电话或地址查找系统中,而不是在常规系统中。
我有 3 个实体
- 工人
- 学生
- 地址
每个工人可以有多个地址。每个学生可以有多个地址。每个地址可以是x个学生和y个工人的地址。
我的问题是,最好的数据建模是什么样的。仅在一个关联 table 中实现多对多关系,如下所示:
ID | Address_ID | Worker_ID | Student_ID
其中ID是PK和Worker_ID或Student_ID 可以为 null
或 2 table 像这样:
Address_ID | Worker_ID
PK 是 Address_ID 和 Worker_ID
和
Address_ID | Student_ID
PK 是 Address_ID 和 Student_ID
哪个选项最好,为什么?
提前致谢。
首先:建模技术不好:
Each address can be the address of x students and y workers
不需要指定一个Address
到两个或多个Students
或Workers
。如果他们有相同的 Address
你可以重复 Address
。 注意:有多少学生和工人有相同的地址?
在这种情况下:冗余优于复杂性。
其次:你的第一种方法是错误的(ID | Address_ID | Worker_ID | Student_ID
)并在数据库中制造了一个Nullification陷阱。你的第二种方法更好。
第三种:我提供第三种方法。
您有 Worker
和 Student
table。所以这些 table 绝对具有 共同属性 。因此,您可以创建另一个 table 并将其命名为:Person
。然后将所有公共属性放入其中。然后你可以将 Person
与 Address
联系起来(多对多或一对多)
在这种情况下,Worker
和 Person
(以及 Student
和 Person
)之间存在继承关系。要 将继承映射到关系模型 ,您可以在 Worker
和 Person
(以及 Student
和 Person
).在这些一对一关系中,最好将 Person_ID
转移到 Worker
(以及 Person_ID
转移到 Student
)。
我有一些问题。
为什么你决定做一个地址 table?
您系统中有多少搜索是基于地址字段的?
您可以将地址用作字符串字段。在数据库设计中,我们在某些情况下将多字段字段更改为table。重要的条件是搜索的字段太多了。
例如在 Post 系统或电话或地址查找系统中,而不是在常规系统中。