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_ID或Student_ID可以为空
或像这样的 2 个表:
Address_ID | Worker_ID
Run Code Online (Sandbox Code Playgroud)
PK 是Address_ID和Worker_ID
和
Address_ID | Student_ID
Run Code Online (Sandbox Code Playgroud)
PK 是Address_I D 和Student_ID
哪个选项是最好的,也许为什么?
提前致谢。
首先:这不是很好的建模技术:
每个地址可以是x个学生和y个工人的地址
不需要指定一个Address到两个或多个Students或Workers。如果它们相同,Address您可以重复Address. 注意:有多少学生和工人有相同的地址?
在这种情况下:冗余优于复杂性。
其次:您的第一种方法是错误的(ID | Address_ID | Worker_ID | Student_ID)并在数据库中制作了一个Nullification陷阱。你的第二种方法更好。
第三:我提供第三种方法。
你有Worker和Student表。所以绝对这些表有共同的属性。所以你可以制作另一个名为它的表:Person。然后把所有常见的属性都放进去。然后,你可以涉及Person与Address(许多一对多或一对一许多)
在这种情况下,Worker和Person(和Student和Person)之间存在继承。要将继承映射到关系模型,可以使用Worker和Person(和Student和Person)之间的一对一关系。在这些一对一的关系中,最好转移Person_ID到Worker(和Person_ID到Student)。