Database MVD3的实例:(及物性)如果X↠;Y和Y↠;Z、 然后X↠;(Z−;Y)

Database MVD3的实例:(及物性)如果X↠;Y和Y↠;Z、 然后X↠;(Z−;Y),database,normalization,database-normalization,Database,Normalization,Database Normalization,我正在学习数据库规范化和连接依赖项以及 5NF。我经历了一段艰难的时光。谁能给我一些多值依赖规则的实际例子: MVD3:(及物性)如果X↠ Y和Y↠ Z、 然后X↠ (Z)− Y) 函数依赖/规范化理论以及BCNF之前(包括BCNF)的范式是在所有数据属性(列/类型/…)在某种意义上都是“原子”的假设基础上发展起来的。到目前为止,这种“特定意义”早已被弃用,但本质上它归结为“表中的单个单元格值本身不能包含多个值”的概念。想想看,一个ISBN编号的文本CSV列表,一个在表格中的单元格中显示为值的表

我正在学习数据库规范化和连接依赖项以及 5NF。我经历了一段艰难的时光。谁能给我一些多值依赖规则的实际例子:


MVD3:(及物性)如果X↠ Y和Y↠ Z、 然后X↠ (Z)− Y) 函数依赖/规范化理论以及BCNF之前(包括BCNF)的范式是在所有数据属性(列/类型/…)在某种意义上都是“原子”的假设基础上发展起来的。到目前为止,这种“特定意义”早已被弃用,但本质上它归结为“表中的单个单元格值本身不能包含多个值”的概念。想想看,一个ISBN编号的文本CSV列表,一个在表格中的单元格中显示为值的表格(真正的嵌套表格)

现在想象一个例子,课程、教授和学习书籍被用作课程材料。想象一下,所有这些都在一个3列的表格中建模,表格上写着“教授(P)教授课程(C),并使用书籍(B)作为课程材料。”如果任何给定的课程(Cn)可以使用多本书(B),并且任何给定的教授(Pn)可以教授多个课程(C),并且可以有多个教授(P)教授任何给定的课程(Cn),那么这个表显然是所有键(键是全套属性{P,C,B})

这意味着该表满足BCNF

但现在想象一下,有一条规则,大意是“任何给定课程(Cn)所使用的一套书籍必须相同,无论是哪位教授教授。”

在规范化发展到现在众所周知的形式时,不允许有本身就是表(关系)的表列(关系属性)。(因为这样的设计被认为违反了1NF,这一概念现在被认为是可疑的。)

想象一下,我们确实被允许将关系属性建模为关系类型。然后我们可以将我们的三列表格(/关系)建模如下:“教授(P)教授课程(C),并使用这套书籍(SB)作为课程材料。”。属性SB将不再是一个ISBN编号,就像在前面的更明显的设计中一样,但它将是一个(可能是一元)关系,包含整个ISBN编号集。如果我们画出这样的设计,然后我们考虑我们的规则:“所有的教授都用同一套书来做同样的课程”,然后我们看到这个规则现在可以表达为从(C)到(SB)的FD!!!这意味着我们手上有一个较低的NF违规

4和5 NF是由此类问题引起的(其中单个属性值的出现-courseID(C)-导致需要出现多行(多个(B)ISBn编号),这一要求很早就被识别出来,但没有目前被认为是最佳的解决方案(RVA)因此,4和5 NF被创建为“新的和进一步的标准形式”,其中2、3和BC NF的现有定义已足以处理当前情况,前提是RVA已被确认为有效的设计方法

为了支持这一说法,让我们看看在我们的{p,C,SB}设计中,通过FD C->SB,我们应该做些什么来消除NF违规:

我们将该表拆分为两个单独的表{p,C}和{C,SB},分别具有键{p,C}和{C},这两个表都满足BCNF

但是我们仍然有这个SB属性,它保存一组ISBN编号。处理这个问题可以通过应用一种类似“解组”的技术来完成。将它应用到我们的{C,SB}表将得到一个{C,B}表,其中B是ISBN图书编号(或您希望在数据库中使用的任何标识符),表的键是{C,B}.如果我们消除了4/5 NF违规,我们将得到完全相同的设计


您可能还想看看

MVD的困难之一往往是寻找合理的示例。查看这篇30年的文章,它通过示例解释了范式:(“关系数据库理论中五种范式的简单指南”)