数据库 - 第三范式 (3NF)



当满足以下条件时,表处于第三范式:

  • 它处于第二范式。
  • 所有非主键字段都依赖于主键。

这些非主键字段之间的依赖关系存在于数据之间。例如,在下表中,街道名称、城市和州与它们的邮政编码不可分割地绑定。

CREATE TABLE CUSTOMERS(
   CUST_ID       INT              NOT NULL,
   CUST_NAME     VARCHAR (20)      NOT NULL,
   DOB           DATE,
   STREET        VARCHAR(200),
   CITY          VARCHAR(100),
   STATE         VARCHAR(100),
   ZIP           VARCHAR(12),
   EMAIL_ID      VARCHAR(256),
   PRIMARY KEY (CUST_ID)
);

邮政编码和地址之间的依赖关系称为传递依赖关系。为了符合第三范式,您需要做的就是将街道、城市和州字段移动到它们自己的表中,您可以将其称为邮政编码表。-

CREATE TABLE ADDRESS(
   ZIP           VARCHAR(12),
   STREET        VARCHAR(200),
   CITY          VARCHAR(100),
   STATE         VARCHAR(100),
   PRIMARY KEY (ZIP)
);

下一步是修改 CUSTOMERS 表,如下所示:

CREATE TABLE CUSTOMERS(
   CUST_ID       INT              NOT NULL,
   CUST_NAME     VARCHAR (20)      NOT NULL,
   DOB           DATE,
   ZIP           VARCHAR(12),
   EMAIL_ID      VARCHAR(256),
   PRIMARY KEY (CUST_ID)
);

消除传递依赖关系的主要优点有两个方面。首先,减少了数据重复量,因此数据库变得更小。

第二个优点是数据完整性。当重复数据发生变化时,存在很大的风险只更新部分数据,尤其是在数据分布在数据库中的许多不同位置时。

例如,如果地址和邮政编码数据存储在三个或四个不同的表中,那么邮政编码的任何更改都需要波及到这三个或四个表中的每个记录。

sql-rdbms-concepts.htm
广告