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 中执行某些操作,因为我们知道如果进行转换、应用和转换回会发生什么。