第五范式 (5NF)2025年5月26日 | 阅读 4 分钟
什么是连接依赖?它规定,当一个关系分解成几个较小的关系后,必须能够通过连接公共键来重新组合成原始关系。 什么是无损分解?良好的数据库设计方法是尽可能消除数据冗余。在关系数据库中,一种方法是将一个关系分解成多个关系。这应该确保通过连接分解后的关系来恢复原始关系。能够存储原始关系所有信息的分解称为无损分解。 现在我们考虑下面的关系 **Fact_Comp_Proj**,它处于 4NF 且不存在多值依赖。
三个子关系是: R1 ( @Factory + @Component)
R2 (@Component+ @ Project)
R3 (@Factory + @ Project)
通过连接这些关系,我们再次得到原始关系 Fact_Comp_Proj,因此连接依赖成立。在此连接依赖中,组件关系只包含键的子集。 例如:关系 R1 只包含 Factory 和 Component 键,而不包含 Project 键。因此,关系 Fact_Comp_Proj 不处于 5NF。然而,关系 R1、R2 和 R3 处于 5NF,因为它们属性之间不存在依赖关系。 注意:多值依赖 (MVD) 是连接依赖的一种特殊情况,因此每个 5NF 关系也处于 4NF。现在假设我们修改 Fact_Comp_Proj 关系,添加如下元组。该关系不再有任何连接依赖。该关系处于 5NF。
现在考虑另一个名为 RANKING 的关系,它表示一个虚构的汽车工厂排名列表。
上述关系有两个候选键:Factory# 和 Fact_name,并满足两个连接依赖: JD1 -> ((Factory#, Fact_name, Position), (Factory#, City)) JD2 -> ((Factory#, Fact_name, Position), (Factory#, Position), (Factory_name, City)) 上述关系处于 5NF,因为构成上述连接依赖部分的分解都是该关系的候选键。 在处理 5NF 时应牢记以下几点:
示例 3
在上面的表中,John 在 Semester 1 上同时参加 Computer 和 Math 课程,但他在 Semester 2 不参加 Math 课程。在这种情况下,所有这些字段的组合都需要来识别一个有效的数据。 假设我们添加一个新的 Semester,即 Semester 3,但不知道科目以及由谁来教授该科目,因此我们将 Lecturer 和 Subject 留空。但所有三个列共同构成主键,因此我们不能将其他两列留空。 因此,为了使上面的表处于 5NF,我们可以将其分解成三个关系 P1, P2 & P3。 P1
P2
P3
5NF 的缺点5NF 的主要缺点是数据库的复杂性。它拥有大量的表和关系,这增加了数据库的复杂性并降低了性能。 下一主题DBMS 关系分解 |
我们请求您订阅我们的新闻通讯以获取最新更新。