2NF与BCNF“冲突”问题

2NF与BCNF“冲突”问题

2NF在《数据库系统导论》中的定义:(假定只有一个候选码,且该候选码是主码)当且仅当关系变量属于1NF,且该关系变量的每一个非码属性都不约的依赖于主码时,该关系变量属于2NF。

2NF在《数据库系统工程师教程》中的定义:如果关系模式R∈1NF,且每一个非主属性完全依赖于码,则关系模式R∈2NF。

2NF在《数据库系统概念》中并没有提及它的定义,只是说2NF只具有历史意义,已经不在实际应用中使用。

3NF在《数据库系统导论》中的定义:(假定关系变量只有一个候选码,且该候选码是主码)当且仅当一个关系变量属于2NF且该关系变量的所有非码属性都不传递依赖于主码时,该关系变量属于3NF。

3NF在《数据库系统概念》8.3.4中的定义:具有函数依赖集F的关系模式R,对于F所有形如α→β的函数依赖(其中 α ⊆ R, β ⊆ R ),以下至少一项成立:

  • α→β是一个平凡的函数依赖(即,β ⊆ α)(PS:这里是不是和2NF有冲突,β ⊆ α应该是部分依赖于码吧?2NF说的是非码属性,所以这里没有冲突。)
  • α是模式R的一个超码
  • β-α中的每个属性A都包含于R的一个候选码中。

3NF《数据库系统工程师教程》中的定义7.6.2.3节:当2NF消除了非主属性对码的传递依赖,则称为3NF。

BCNF在《数据库系统工程师教程》7.6.2.2中的定义:关系模式R∈1NF,若X → Y且Y ⊄ X时,X必含有码,则关系模式R ∈ BCNF。也就是说,当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。

BCNF在《数据库系统导论》中的定义:当且仅当一个关系变量的所有非平凡的、左部不可约的函数依赖的决定因素(决定因素:函数依赖的左边)是候选码,则该关系变量属于BCNF。

BCNF的定义比3NF更简洁,因为它没有涉及1NF、2NF、主码及传递依赖等概念。——出自《数据库系统导论》p232

BCNF在《数据库系统概念》8.3.2中的定义:具有函数依赖集F的关系模式R,属于BCNF的条件是,对F所有形如α→β的函数依赖(其中 α ⊆ R, β ⊆ R ),下面至少有一项成立:

  • α→β是平凡的函数依赖(即,β ⊆ α)(PS:这里是不是和2NF有冲突,β ⊆ α应该是部分依赖于码吧?2NF说的是非码属性,所以这里没有冲突。)
  • α是模式R的一个超码

p188页8.3.4节,第一句:
BCNF要求所有非平凡函数依赖形如α→β,其中α为一个超码。

在实际生活中,同时满足下述条件的情况并不常见。对于一个不(同时)满足下面条件的关系变量,3NF和BCNF是等价的

  • 具有一个或多个候选码
  • 候选码是复合的。
  • 候选码之间是重叠的(即至少有一个属性是相同的)

——出自《数据库系统导论》

总结:对于1NF、2NF、3NF、BCNF非正式的关系是1NF→2NF→3NF→BCNF。但实际上只有1NF→2NF→3NF是存在依赖关系的,而BCNF只是对3NF进行了一些修正,正如《数据库系统导论》中所说的BCNF更为简洁,不涉及1NF、2NF和传递依赖等概念。

《数据库系统概念》内容的组成有点混乱,对于定义的描述不明显。本书我个人认为也不太适合“学习”,更适合查阅。

Comments are closed.