【问题标题】:Need help designing my database需要帮助设计我的数据库
【发布时间】: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


【解决方案1】:

呃,我想我找到了答案。我决定为 Employee 表使用 companyID 和 EmployeeID 的组合键(因为 Employee 是一个弱实体),并将这个组合键用作其他 4 个实体的组合主键,因为它们都将被制成弱实体也是如此。

【讨论】:

  • 小心使用“真实”值作为关系键。如果有人决定换到另一家公司会怎样?这是否意味着您需要更改该员工的 PK,并将更改级联到所有相关实体?
  • 据我所知,如果有人加入另一家公司,则会为他们创建一个全新的记录,因为原来的公司也想存储过去员工的信息。
猜你喜欢
  • 2023-03-24
  • 2010-11-11
  • 1970-01-01
  • 2011-07-17
  • 2011-03-25
  • 2011-07-23
  • 1970-01-01
相关资源
最近更新 更多