什么是标准化?1NF、2NF、3NF、BCNF数据库示例

发布于:2021-01-27 10:03:09

0

2459

0

数据库 设计技术 规范化

什么是标准化?

规范化是一种数据库设计技术,可减少数据冗余,消除插入、更新和删除异常等不需要的特征。规范化规则将较大的表划分为较小的表,并使用关系将它们链接起来。SQL规范化的目的是消除冗余(重复)数据,保证数据的逻辑存储。

关系模型的发明者Edgar Codd通过引入第一范式提出了数据规范化理论,并继续用第二范式和第三范式扩展了该理论。后来,他加入了雷蒙德F博伊斯,发展了博伊斯Codd范式理论。

数据库范式

这里是一个范式列表

  • 1NF(第一范式)

  • 2NF(第二范式)

  • 3NF(第三范式)

  • BCNF(Boyce Codd范式)

  • 4NF(第四范式)

  • 5NF(第五范式)

  • 6NF(第六范式)

sqlserver中的数据规范化理论仍在进一步发展中。例如,甚至对6th范式也有讨论,但在大多数实际应用中,3rd范式的归一化效果最好。SQL规范化理论的发展如下所示:

{xunruicms_img_title}

数据库规范化示例

可以通过案例研究很容易理解。假设,一个视频库维护着一个出租电影的数据库。在数据库中没有任何规范化,所有信息都存储在一个表中,如下所示。让我们了解数据库中的表规范化示例:

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

这里您可以看到列有多个值。现在让我们进入第一范式:

1NF(第一范式)规则

  • 每个表单元格应包含一个值。

  • 每个记录都必须是唯一的。

1NF示例

What is Normalization? 1NF, 2NF, 3NF & BCNF with Examples

在继续之前,让我们先了解几件事。

什么是钥匙?

key是用于唯一标识表中记录的值。键可以是单列,也可以是多列的组合

注:表中不用于唯一标识记录的列称为非键列。

什么是主键?

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

primary是用于唯一标识数据库记录的单列值。

它具有以下属性

  • 主键不能为NULL。

  • 主键值必须是唯一的。

  • 主键值应很少更改。

  • 插入新记录时必须为主键指定值。

什么是复合键?

复合键是由多列组成的主键,用于唯一标识记录。

在我们的数据库里,我们有两个叫罗伯特·菲尔的人,但他们住在不同的地方。

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

因此,我们需要全名和地址来唯一地标识记录。这是一个复合键。

让我们进入第二范式2NF

2NF(第二范式)规则

  • 规则1-在1NF中。

  • 规则2-单列主键。

很明显,除非我们对上面的表进行分区,否则我们无法将我们的简单数据库变成2nd规范化形式。

我们把1NF表分为两个表,即。表1和表2。表1包含成员信息。表2包含了关于电影租赁的信息。

我们引入了一个名为Membershipu id的新列,它是表1的主键。在表1中,可以使用成员身份id唯一地标识记录。

数据库-外键

在表2中,Membership_ID是外键。

外键引用另一个表的主键!它有助于连接您的表。

  • 外键可以具有与其主键不同的名称。

  • 它确保一个表中的行在另一表中具有对应的行。

  • 与主键不同,它们不必唯一。大多数时候他们不是。

  • 即使主键不能,外键也可以为空 。   

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

为什么需要外键?

假设,新手在表B中插入一条记录,例如:

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

只能将存在于父表中唯一键中的值插入到外键中。这有助于参照完整性。

通过将表2中的成员身份id声明为表1中成员身份id的外键,可以克服上述问题。

现在,如果有人试图在父表中不存在的成员身份id字段中插入一个值,将显示一个错误!

什么是传递函数依赖关系?

可传递函数依赖关系是指在更改非键列时,可能会导致其他任何非键列发生更改。

考虑一下表1。更改非键列的全名可能会更改称呼语。

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

让我们进入3NF

3NF(第三范式)规则

  • 规则1-在2NF中

  • 规则2-没有传递函数依赖关系

要将2NF表移到3NF,我们需要再次划分表。

3NF示例

下面是SQL数据库中的3NF示例:

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

什么是规范化? 1NF,2NF,3NF和BCNF以及示例

我们再次划分了表,并创建了一个存储称呼语的新表。

没有可传递的函数依赖关系,因此我们的表在3NF中。

在表3中称呼语ID是主键,在表1中,称呼ID对于表3中的主键是陌生的。

现在我们的小例子处于一个不能进一步分解以获得更高规范化形式的级别。事实上,它已经以更高的规范化形式出现了。在复杂的数据库中,通常需要为进入下一级规范化数据而分别努力。

BCNF(Boyce Codd范式)

即使一个数据库是3rd正态形式,如果它有多个候选键,仍然会导致异常。

有时BCNF也被称为3.5范式。

4NF(第四范式)规则

如果没有数据库表实例包含描述相关实体的两个或多个独立的多值数据,则它是4th范式。

5NF(第五范式)规则

一个表只有在4NF下才是5th范式,并且不能分解成任何数量的较小的表而不丢失数据。

6NF(第六范式)规则

提出的第六范式(6NF)尚未标准化,但已有一段时间被数据库专家讨论。希望在不久的将来,我们能对6th范式有一个明确的标准化定义。

这就是SQL规范化的全部内容!!!

摘要

  • 数据库设计对于满足企业系统数据需求的数据库管理系统的成功实施至关重要。

  • DBMS中的规范化过程有助于产生经济高效且具有更好安全模型的数据库系统。

  • 功能依赖性是一个非常重要的问题规范化数据处理的一个组成部分。

  • 大多数数据库系统都是规范化的数据库,直到第三种规范化形式。

  • 主键唯一标识的是表中的记录,不能为空。

  • 外键有助于连接表并引用主键 。