sql - 对什么是 superkey 或 Boyce Codd Normal 形式的误解

标签 sql database key relational-database primary-key

this video 的 9:34演讲者说所有 3 个函数依赖都是 Boyce Codd 范式。我不相信,因为显然 GPA 无法确定学生表中的 SSN、sName、address 和所有其他属性。要么我对 Boyce Codd Normal Form 的定义感到困惑,要么什么是 super 键?它是否只需要能够唯一地标识某些属性,而不是模式中的所有属性?例如,GPA 确实确定优先级(位于功能依赖性的右侧)但不是其他所有内容。

例如,如果我有关系 R(A,B,C,D) 和 FD A->B,我们会说 A 是 B 的 super 键,但我认为 super 键是针对整个表的吗?更让我感到困惑的是,我知道对于 BCNF,它可以是一个(主)键,但您只能拥有表的主键。啊,我的脑袋疼。

最佳答案

“……演讲者说所有 3 个函数依赖项都是 Boyce Codd 范式。”

成为 BC 范式是 RELATIONS 可以拥有的属性(关系变量,更具体地说,或关系模式,如果该术语更适合您),而不是功能依赖性。如果您发现有人如此草率地谈论归一化理论,请离开并继续进行更准确的解释。

关系变量是否确实是 BC 范式,取决于它应该包含哪些函数依赖项。这就是为什么说 函数依赖 是或不是 BC 范式完全是胡说八道。

“我不相信,因为显然 GPA 无法确定学生表中的 SSN、sName、address 和所有其他属性。要么我对 Boyce Codd Normal Form 的定义感到困惑,要么是什么 super key 是吗?它是否只需要能够唯一地标识某些属性,而不是模式中的所有属性?”

不可简化的候选键是关系模式的属性集(不一定是唯一的),无论关系值如何有效地出现在数据库的关系变量中,都保证具有属性值的唯一组合。

在您的 (A,B,C,D) 示例中,如果 A->B 是唯一持有的 FD,那么唯一的候选键是 {A,C,D}。

“例如,如果我有关系 R(A,B,C,D) 和 FD A->B,我们会说 A 是 B 的 super 键”

在这种情况下,将 A 称为 B 的“ key ”是草率和令人困惑的。假装在教别人的人应该知道这一点,而那些不假装教别人的人,在他们没有知道之前不应该从事任何教学。在这种情况下,最好将 A 称为 B 的“决定因素”。关系数据库设计上下文中的术语“键”具有非常明确和精确的含义,使用相同的术语来表示其他含义只会让人感到困惑。正如您的问题所证明的那样。

“但我认为 super 键是针对整个表的?”

是的,你想对了。

回到您的 (A,B,C,D) 示例。 如果我们将该设计拆分为 (A,B) 和 (A,C,D),那么我们将有一个关系模式 - (A,B)其中一个我们可以说该模式中的“{A} 是一个键”。

这实际上正是 FD A->B 的意思:如果您采用数据库中 (A,B,C,D) 中出现的关系值的投影schema- 在属性 {A,B} 上,然后 你应该得到一个没有 A 值出现两次的关系(如果它出现了,那么那个 A 值将对应于 >1 个不同的 B 值,这意味着 A 毕竟不可能是 B 的决定因素)。

“更让我感到困惑的是,我知道对于 BCNF,它可以是一个(主)键,但是......”

现在你自己马虎了。 “它”指的是什么?

关于sql - 对什么是 superkey 或 Boyce Codd Normal 形式的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12879434/

相关文章:

mysql - 创建父子表,child 是否需要自己的主 id 列?

key - 检查雪花变体中是否存在 key

sql - 查找字符串中第一个数字的位置并拆分

MySQL 表查找查询

mysql - 全局变量 MySQL

mysql - 获取海量数据的最佳方式

mysql - 索引两列表的所有字段

git - 使用 Github 部署 key 时出现权限被拒绝错误

java - 如何使用 scrypt 用密码加密私钥

sql - 生成范围之间的数字