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)
);
去除传递性依赖的优势主要有两个。首先,数据重复量减少,因此您的数据库变得更小。
第二个优势是数据完整性。当重复的数据发生变化时,如果数据库中的数据分散在许多不同的位置,只更新其中一部分数据就存在很大的风险。
例如,如果地址和邮政编码数据存储在三个或四个不同的表中,那么邮政编码的任何更改都需要传播到这三个或四个表中的每条记录。