【发布时间】:2018-03-20 09:29:37
【问题描述】:
我有给定数量的实体,其中 6 个彼此相关。但是其中 4 个(即 JobInfo、Child、Spouse 和 ParentInfo)链接到主要的 Person/Employee 实体,并且该员工实体需要公司的主键 CompanyID,因为 EmployeeID 可能不是唯一的。所以我现在不知道如何设计我的数据库。
据我所知,唯一的方法就是在其他 4 个属性中将 CompanyID 声明为外键。 [我很困惑,因为没有公司,员工就无法存在,本质上使它成为一个弱实体,而其他 4 个实体没有员工实体就无法存在]
谢谢,它将在 sql management studio 中的 mssql 中完成
编辑:忘了说 Employee 的主键很可能是 Company 和 Employee 的主键的组合键
【问题讨论】:
-
为了保证唯一性,您在 Employee 实体上的 PK 肯定必须是 CompanyID 和 EmployeeID 的组合?
-
是的,这就是现在的问题,因为当它们成为复合键时,从技术上讲,它使其他四个实体与雇主直接相关,不应该。
-
您能否在您的 Employee 表中添加一个标识列,并使用它来对其他表强制执行 FK 约束?这样一来,您就可以使用不可变的 ID,而不必担心有人想改变公司的发展方向。
-
没问题
-
代理键 FTW。为员工行生成的 id 列打破了公司表上的“错误依赖”。事实上,“员工 ID”在您的表中并不是唯一的,这实际上使它有点用词不当; 在这种情况下,它不是一个 id。
标签: sql sql-server database weak-entity er-modeling