Skip to main content

将数据库置于第二范式(2NF)

Anonim

我们已经研究了规范化数据库表的几个方面。首先,我们讨论了数据库规范化的基本原理。上一次,我们探讨了第一个普通形式(1NF)规定的基本要求。现在,让我们继续我们的旅程并涵盖第二范式(2NF)的原则。

2NF的一般要求

  • 删除应用于表的多行的数据子集,并将它们放在单独的表中。
  • 通过使用外键在这些新表及其前任之间创建关系。

这些规则可以用简单的语句概括:2NF尝试通过提取表,将其放在新表中并在这些表之间创建关系来减少表中冗余数据的数量。

我们来看一个例子。想象一下在线商店,它将客户信息保存在数据库中。他们可能有一个名为Customers的表,其中包含以下元素:

  • CustNum
  • 名字
  • 地址
  • 压缩

简要回顾一下这个表,可以看出少量的冗余数据。我们两次存放“Sea Cliff,NY 11579”和“Miami,FL 33157”条目。现在,在我们的简单示例中,这可能看起来似乎没有太多添加的存储,但想象一下,如果我们的表中有数千行,浪费的空间。此外,如果要改变Sea Cliff的邮政编码,我们需要在整个数据库的许多地方进行更改。

在符合2NF的数据库结构中,提取此冗余信息并将其存储在单独的表中。我们的新表(我们称之为ZIP)可能包含以下字段:

  • 压缩

如果我们想要超高效,我们甚至可以提前填写此表 - 邮局提供所有有效邮政编码及其城市/州关系的目录。当然,您遇到过使用此类数据库的情况。接到订单的人可能先问你邮政编码,然后知道你打电话的城市和州。这种类型的布置减少了操作员错误并提高了效率。

现在我们已经从Customers表中删除了重复数据,我们已经满足了第二个普通表单的第一个规则。我们仍然需要使用外键将两个表绑定在一起。我们将使用邮政编码(ZIP表中的主键)来创建该关系。这是我们的新客户表:

  • CustNum
  • 名字
  • 地址
  • 压缩

我们现在已经最小化了存储在数据库中的冗余信息量,并且我们的结构处于第二范式。