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)
    );
    
    邮政编码和地址之间的依赖关系称为传递依赖关系。为了符合第三范式,您只需将 Street、City 和 State 字段移动到它们自己的表中,您可以将其称为 Zip Code 表。-
    
    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)
    );
    
    消除传递依赖的好处主要有两个。首先,减少了数据重复量,因此您的数据库变得更小。
    第二个优势是数据完整性。当重复数据发生变化时,仅更新部分数据的风险很大,尤其是当它分布在数据库中的许多不同位置时。
    例如,如果地址和邮政编码数据存储在三个或四个不同的表中,那么邮政编码的任何更改都需要影响这三个或四个表中的每条记录。