database-normalization - 这是违反 BCNF 吗?
问题描述
我读了很多例子,只要没有重叠的候选键,3NF 就是 BCNF ......
鉴于:
R(a,b,c,d,e,f)
a,b,c -> d
a,b,c -> e
a,b,c -> f
所以,a,b,c 是唯一的候选键。到目前为止,它是 BCNF。
现在,我添加了 FD f-> c ,它是非素数 -> 素数,但我仍然没有重叠的候选键。
我是回到 3NF 还是仍然在 BCNF?
解决方案
如果您添加一个新的 FD,那么您必须重新确定 CK,哪些属性是素数和非素数,是否在 3NF 中,是否有重叠的 CK 以及是否在 BCNF 中。
我们有一个新的给定封面,其中有一个 FD。(如果我们想要现在所有的 FD,那么我们必须重新应用 Armstrong 公理。如果我们想要新覆盖的最小覆盖,那么我们必须计算它。)应用 CK 的定义和/或算法来找到 CK,我们有 CK {a,b,c} 和 {a,b,f}。非主要属性是 d & e。应用 3NF 的定义,例如每个非素数属性在功能上非传递地依赖于每个 CK,我们有 3NF。有重叠的 CK,所以我们可能没有 BCNF。应用 BCNF 的定义,例如非平凡 FD 的每个行列式都是超级密钥,我们注意到 f->c 不是超级密钥,所以我们没有 BCNF。
推荐阅读
- mysql - MySQL - 需要找到 SUM 查询的 MAX
- c# - 如何将页面加载到从另一个 wpf 页面开始的窗口中的框架中?
- macos - Unix 帮助将第 2 行和第 3 行移动到第 1 行的中间
- java - 擦除:以下函数是否会覆盖 android 上的内存?
- python - 在模型 Doc2Vec 中获取向量的标签
- c - How to write correctly a file in C?
- node.js - TypeScript 等待 promise.all 并返回结果
- wxpython - 如何设置 wx.TextEntryDialog 按钮的标签
- java - Spring Boot公共库项目中的单元测试
- java - 似乎无法让 Eclipse IDE 在我的 Mac 上找到 geckodriver