【发布时间】:2018-06-09 10:40:52
【问题描述】:
我有 3 个实体
- 工人
- 学生
- 地址
每个工人可以有多个地址。每个学生可以有多个地址。每个地址可以是 x 个学生和 y 个工人的地址。
我的问题是,最好的数据建模是什么样的。只在一个关联表中实现多对多关系,如下所示:
ID | Address_ID | Worker_ID | Student_ID
其中 ID 是 PK 并且 Worker_ID 或 Student_ID 可以为空
或 2 个这样的表:
Address_ID | Worker_ID
PK 是 Address_ID 和 Worker_ID
和
Address_ID | Student_ID
PK 是 Address_ID 和 Student_ID
哪个选项最好,也许是为什么?
提前致谢。
【问题讨论】:
-
似乎地址不是唯一适用于学生和工人的字段。我很想创建一个存储全局信息的“人员”实体,然后将与学生和工人的关系添加回人员表。这还有一个额外的好处,就是让学生也可以成为工人。
-
呼应其他 cmets,您肯定希望有一个“人员”或“成员”表,并有一个单独的表(或列)来定义人员/成员与组织相关的能力.下一个问题是,同一个人能否以一种以上的身份联系——例如,工人也可以是学生吗?他们的地址与会员本身有关,还是与他们的能力有关?例如,学生成员可能希望记录家庭地址和学期地址,而这种区别对于工作人员身份的同一成员可能毫无意义。
-
丹·法瑞尔所说的。学生或工人与人之间的关系是 IS-A 关系。学生和工人都可以通过 person-id 来识别。查看类表继承了解更多信息。
标签: sql database database-design entity data-modeling