规范化的目的

28 Aug 2024 | 5 分钟阅读

规范化 是指对数据之间的关系进行结构化和处理的过程,以最小化关系表中的冗余并避免数据库中不必要的异常属性,如插入、更新和删除异常。它有助于将大型数据库表分割成更小的表,并在它们之间建立关系。它可以消除冗余数据,并简化表的添加、操作或删除字段的操作。

规范化定义了关系表的规则,以判断其是否满足范式。范式 是一个评估每个关系是否满足定义标准并从关系中移除多值、连接、函数和平凡依赖的过程。如果数据被更新、删除或插入,它不会导致数据库表出现任何问题,并有助于提高关系表的完整性和效率。

规范化的目标

  1. 它用于消除关系表中的重复数据和数据库异常。
  2. 通过检查表中使用的新的数据类型,规范化有助于减少冗余和复杂性。
  3. 它有助于将大型数据库表分割成更小的表,并通过关系将它们链接起来。
  4. 它避免了表中重复的数据或不存在的重复组。
  5. 它减少了数据库中出现异常的可能性。

异常的类型

以下是导致表不一致、完整性丢失和数据冗余的异常类型。

1. 数据冗余 在关系数据库中,当两个或多个行或列具有相同的值或重复的值时,就会发生数据冗余,导致不必要的内存利用。

Student 表

学生注册课程ID学生姓名地址课程
2056204James洛杉矶经济学
2056247James洛杉矶经济学
2246247特伦特·博尔特纽约数学
2306204里奇·里奇埃及电脑
2306208里奇·里奇埃及帐户

上表中,有两位学生,“詹姆斯”和“里奇·里奇”,他们的记录在输入新的课程ID时是重复的。因此,它会重复 studRegistration、StudName 和 address 属性。

2. 插入异常: 当需要插入某些属性或数据项而其他属性不存在时,关系数据库中就会发生插入异常。例如,在学生表中,如果我们想插入一个新的课程ID,我们就必须等到学生报名参加课程。这样,就很难在表中插入新记录。因此,它被称为插入异常。

3. 更新异常: 当重复数据仅在一个地方更新而未在所有实例中更新时,就会发生异常。因此,它使我们的数据或表处于不一致的状态。例如,假设有一个学生“詹姆斯”属于学生表。如果我们想更新学生表中的课程,我们就必须在课程表中更新相同的课程;否则,数据可能**不一致**。它会反映表中更新值的变化,其中一些值不会。

4. 删除异常: 当由于删除其他记录而从数据库表中丢失或删除某些记录时,数据库表中就会发生异常。例如,如果我们想从学生表中删除特伦特·博尔特,它也会从学生表中删除他的地址、课程和其他详细信息。因此,我们可以说删除某些属性可以删除数据库表中的其他属性。

因此,我们需要避免表中的这些类型的异常,并维护数据库表的完整性和准确性。因此,我们在数据库管理系统中使用规范化概念。

规范化的类型

  1. 第一范式 (1NF)
  2. 第二范式 (2NF)
  3. 第三范式 (3NF)
  4. Boyce-Codd 范式 (BCNF)
  5. 第四范式 (4NF)
  6. 第五范式 (5NF)

第一范式 (1NF): 如果表中的所有属性只包含原子值,则该表处于第一范式 (1NF)。我们也可以说,如果一个表在属性中包含多值数据项或复合值,则该关系就不能处于第一范式。因此,我们需要通过使表中的条目原子化来将其变为第一范式。

第二范式 (2NF): 如果关系满足以下条件,则该关系处于 2NF。

  1. 表或关系应为 1NF 或第一范式。
  2. 所有非主属性都应完全函数依赖于候选键。
  3. 表中不应包含任何部分依赖。

第三范式 (3NF): 如果表满足以下条件,则该表处于第三范式 (3NF)。

  1. 表或关系应为 2NF。
  2. 它不应包含任何传递依赖。传递依赖是指任何非主属性决定或依赖于其他非主属性。
    如果 FD X 确定 Y(“X” -> “Y”)满足以下条件之一,则关系处于 3NF
    1. 如果 X -> Y 是一个平凡的 FD,即 Y 是 X 的子集。
    2. 如果 X -> Y,其中 X 是超键。
    3. 如果 X -> Y,(Y - X) 是一个主属性。

注意:如果所有函数依赖 (FD) 的左侧 (LHS) 必须是候选键 (CK) / 超键,或者右侧是主属性,则表应为 3 NF。

BCNF: 它代表Boyce-Codd 范式,是 3NF 的下一个版本。有时,它也被称为3.5 NF。如果范式满足以下条件,则该范式称为 BCNF。

  1. 表或关系必须为 3NF。
  2. 如果关系 R 具有函数依赖 (FD) 并且 A 确定 B,其中 A 是超键,则该关系处于 BCNF。

注意:对于 BCNF 的每个函数依赖,左侧应有一个候选/超键。

第四范式 (4 NF):如果关系满足以下条件,则该关系称为第四范式 (4NF)。

  1. 表必须为 BCNF。
  2. 表中不应有多值依赖。

例如,如果对于 A 的单个值,存在多个 B 的值,则依赖 A -> B。则该关系称为多值依赖。

多值依赖的条件如下

  1. 对于多值依赖 A -> B,对于 A 的单个值,存在多个 B 的值。
  2. 如果表至少有三列,它们存在多值依赖。
  3. 对于具有 A、B 和 C 列的关系,其中 B 和 C 应独立。

第五范式 (5 NF): 如果关系满足以下条件,则该关系称为 5NF。

  1. 表应为 4NF。
  2. 不应存在连接依赖或进一步的无损分解。

它也称为投影连接范式 (PJNF)。

连接依赖: 如果关系 (R) 的模式可以划分为较小的表集 R1、R2...Rn,这些表可以通过连接多个表来重新设计为原始表 (R),则称关系 (R) 为连接依赖。