位置:首页 » 文章/教程分享 » SQL第三范式(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)
);

去掉传递依赖的优势主要有二点。首先,数据的重复的量减少,因此,数据库变得更小。

第二个优点是数据的完整性。当重复数据的变化,还有只更新一些数据,尤其是如果它摊开在多个数据库中不同的地方的一大隐患。例如,如果地址和邮政编码数据存储在三个或四个不同的表,然后在邮政编码的任何变化都需要波及到那些三个或四个表中的每一个记录。