用 DBMS 中的示例解释 5NF
它也被称为项目连接范式。如果关系 R 符合 4NF 且不存在连接依赖关系,则它符合 5NF。不存在连接依赖关系意味着无损连接分解。
如果分解保留了原始关系中的所有数据,并且不产生额外的元组,则该分解是无损连接分解。
当且仅当 R 等于 R1、R2、.....Rn 的连接,其中 Ri 是 R 属性集的子集时,关系 R 满足连接依赖关系。
关系 R
| Dept | Subject | Name |
|---|---|---|
| CSE | C | Ammu |
| CSE | C | Amar |
| CSE | Java | Amar |
| IT | C | bhanu |
这里,
dept ->-> subject
dept->-> name
上述关系符合 4NF 规范。如果主键包含三个或更多字段,则符合 4NF 的关系可能会出现异常。主键为 (dept,subject, name)。有时,将一个关系分解为两个较小的关系并不能消除冗余。在这种情况下,可以使用 5NF 将关系分解为三个或更多关系。
上述关系表明,dept 提供许多选修科目,供各种各样的学生选修。学生对科目选择有自己的看法。因此,需要所有三个字段来表示信息。
上述关系未显示非平凡的 MVD,因为属性 subject 和 name 是依赖的;它们是相互关联的(存在功能函数 subject->name)。该关系不能分解为两个关系 (dept, subject) 和 (dept,sname)。
因此,该关系可以分解为以下三个关系 −
R1(dept, subject)
R2(dept, name) 和
R3(subject, name) and it can be shown that decomposition is lossless.
R1
| Dept | Subject |
|---|---|
| CSE | C |
| CSE | Java |
| IT | C |
R2
| Dept | Name |
|---|---|
| CSE | Ammu |
| CSE | Amar |
| IT | Bhanu |
R3
| Subject | Name |
|---|---|
| C | Ammu |
| C | Amar |
| Java | Amar |
| C | Bhanu |
在上述表格分解中,冗余度的减少效果并不明显,但当表格包含大量数据时,冗余度的减少是可以实现的。

让我们看一下,如下图所示,所有范式都可以用一张图来理解。−


