“给定表的CK(候选键)”的两个定义是:
- 表中的列集,它在功能上确定每一列,并且不包含更小的此类集。
- 表中的列集,其子行值是唯一的,并且不包含更小的此类集。
如果没有我们正在使用的定义所需的信息,我们就无法确定表的 CK。例如,所有 FD(功能依赖),或 FD 的规范覆盖或子行值唯一的所有列集等。这些信息总是可以在不涉及另一个表的情况下表达。
我们可以选择一个表的一个 CK 来调用它的“那个”PK(主键)。PK 在关系理论中是无关紧要的。(如果您使用的是 ER 方法并且它有关于 PK 与 CK 的规则,那么您应该引用并标记它。)
Dept 不能是 Employee 表中候选键(例如:Dept、FirstName、LastName、Birthdate)的一部分,因为 Dept 未设置为 Department 表中的主键
Dept 不在Employee 中,因此它不能成为 CK 的一部分。但是如果你添加它,它是否是它的一个CK是独立于其他表的。
如果您问是否可以根据 Dept 是 CK 与 PK 之间的区别来做某事:PK 总是无关紧要的。
如果“Dept”是“Dept#”的拼写错误:仅 Dept# 是或不是 Department 表的 PK 这一事实与另一个表的 CK 无关。无论是PK vs CK总是无关紧要的。
但是我仍然可以只知道 Dept 是 Department 表中的候选键就将 Dept 称为候选键吗?
这是部门的CK。所以在英语中我们可以说它是一个CK。但成为 CK 就是成为特定表的 CK 。
也许你的意思是“我仍然可以称 Dept 为 CK”的员工只是知道......”。只有当你证明它是一个。并且它是否是一个独立于任何其他表时。
(也许您应该在这个问题中称某些东西为 FK?)
PS 一列可以出现在多个表中,它们之间没有 FK。(“参考”仅在您谈论 FK 时才有用。)不同的列之间可以有 FK。当且仅当一组列中的所有子行值都出现在另一列(“引用”)中时,才存在 FK。SQL FK 只需要转到超键(CK 的超集)而不是 CK。FK 可以来自任何列集:FK 只是引用表中的(超)键。了解 FD、superkey、CK、PK、FK(到 CK 或 superkey)的定义。