在二元关系之间实施完整性约束

问题描述 投票:0回答:1

我找不到这个问题的合适标题。以下是 Elmasri-Navathe 的示例 ER 图的摘录:

也许我在书中错过了这一点,但是您将如何在 ER 图及其关系映射中强制执行每个员工必须为控制他们正在从事的项目的同一部门工作的约束?

relational-database entity-relationship referential-integrity
1个回答
0
投票

您所问问题的总称是“引用完整性”

“外键(在那篇文章中广泛提及)是强制引用完整性的一种常见机制,但还有其他技术(请参阅“包含依赖”部分)——只是外键是 SQL 唯一识别的技术。

您的问题是关于架构设计的特定部分。然后,您还应该点击“数据库规范化”的链接,这就是避免保留冗余信息——因为它存在在不同地方失步的风险(“异常”)。

每个员工必须为控制他们正在从事的项目的同一部门工作

好的。因此,如果您知道员工 123 在项目 ABC 工作,并且该项目 ABC 由 XYZ 部门控制,那么您就知道员工 123 一定为 XYZ 部门工作。无需记录员工的“工作”部门:这将是冗余信息/很可能出现异常情况,导致信息不一致。

  • 只需从 Employee 表中删除“Works for”字段及其外键即可。

旁白:在现实的雇佣安排中,员工只从事其“本”部门所属项目的情况很少见。因此,员工“工作”字段不会包含冗余信息。这就是为什么您显示的图表比我答案的朴素设计更常见。

应用程序可能会执行以下操作:首次创建项目时,将其分配给一个部门,为该部门提供员工;如果他们没有空,或者技能不匹配,那么就考虑从其他部门交叉招聘。

© www.soinside.com 2019 - 2024. All rights reserved.