行列式和候选键是否相同?

新手上路,请多包涵

https://web.archive.org/web/20130514174856/http://databases.about.com/cs/specificproducts/g/determinant.htm 我发现了这个 Mike Chapple

定义: 数据库表中的行列式是可用于确定分配给同一行中其他属性的值的任何属性。

示例: 考虑一个具有employee_id、first_name、last_name 和date_of_birth 属性的表。在这种情况下,字段employee_id 确定其余三个字段。姓名字段不能确定employee_id,因为公司可能有多个员工具有相同的名字和/或姓氏。类似地,DOB 字段不能确定employee_id 或name 字段,因为可能有多个员工的生日相同。

该定义是否也适用于候选键?

原文由 Aparan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 550
2 个回答

行列式是 FD(函数依赖)的左侧属性集。但它可能不是 CK(候选键)。行列式不是 CK

  • 一个不属于 CK -> CK 子集的普通 FD
  • 当表不在 BCNF 中时的一些 FD——因为 BCNF 是当非平凡 FD 的每个行列式都是 CK 的超集时。

考虑这个(显然是非 BCNF)表:

 CREATE TABLE US_Address (
  AddressID int,
  Streetline varchar(80),
  City varchar(80),
  State char(2),
  ZIP char(5),
  StateName varchar(80),
  StateTax DECIMAL(5,2)
)

{State} 是 {StateName, StateTax} 的行列式,但它不是 CK。

对 BCNF 的规范化会将 StateName 和 StateTax 从 US_Address 表移到带有 State 的 States 表中。

原文由 Ross Presser 发布,翻译遵循 CC BY-SA 4.0 许可协议

TL;DR 不,“ 行列式”和“ 候选键”不是同一个概念。行列式是 FD 。 CK 是 _一张桌子_。我们也可以合理地说,CK 是其表的(FD)行列式,因为它决定了其中的每一列和列集。


以下所有术语/概念都是针对表 变量 并行定义的。 当给定业务/应用程序中可能出现的每个表值时,表变量具有 FD(功能依赖)、行列式、超键、CK(候选键)或 PK(主键)(在变量意义上)的实例有那个实例(在表格意义上)。

对于 X 和 Y 列的集合,我们可以写成 X -> Y我们说 X 是 _行列式/决定集_,Y 是 函数依赖( FD ) X -> Y 的 _确定集_。

我们说 X 在 功能上决定 Y 并且 Y _在功能上由 X 决定_。我们说 X 是 X -> Y _的行列式_。在 {C} -> Y 我们说 C 在 功能上决定 Y。在 X -> {C} 我们说 X在 功能上确定 C。当 X 是 Y 的超集时,我们说 X -> Y is trivial

当 X 的每个子行值仅与 Y 的一个特定子行值一起出现时,我们说 X -> Y 在表 T 中成立。 或者我们说 X -> Y 是 T 的/在 T 中的 FD。 当 X 是某个 FD 的行列式时在表 T 中,我们说 X 是/在 T 中的行列式。 表的每个平凡 FD 都包含在其中。

表 T 的 超键 是一组在功能上确定每一列的列。 候选键( CK ) 是一个不包含更小的超键的超键。 我们可以选择一个 CK 作为 主键( PK ),然后调用其他 CK 的 备用键( AKs )。当列在某个 CK 中时,它是 _素数_。

请注意,行列式可以是 FD 或粗略 的(包含在其中的 FD) table每个 CK 都是其表的行列式。 (但是,在一个表中,每组列 都是一个行列式:本身,微不足道。同样每一 _列_。)

(这些定义不依赖于规范化。表的 FD 和 CK 用于规范化它。当包含在其中 的非平凡 FD 的 每个行列式都是 超级键 时,表在 BCNF 中。)

SQL 表不是关系,SQL 运算符不是它们的关系/数学对应物。 除其他外,SQL 具有重复行、空值和一种 3 值逻辑。但是,尽管您可以借用术语并赋予它们 SQL 含义, 但您不能仅将这些含义替换为其他 RM 定义或定理并得到一些合理或真实 的东西。因此,我们必须 将 SQL 设计转换为关系设计,应用关系概念,然后再转换回 SQL 。在某些特殊情况下,我们可以直接在 SQL 中执行某些操作,因为我们知道如果进行转换、应用和转换回会发生什么。

原文由 philipxy 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进