数据库教程-数据库 – 第二范式(2NF)

跨零代码为大家提供高品质的解决方案,请大家多多来访,跨零不胜感激,在此谢过。

第二范式指出,它应满足所有1NF的规则,必须有任意列不依赖主键关系:

考虑客户订单的关系,你想存储客户ID,客户名称,订单ID和订单的细节,以及购买日期:

 CREATE TABLE CUSTOMERS(        CUST_ID    INT              NOT NULL,        CUST_NAME VARCHAR (20)      NOT NULL,        ORDER_ID   INT              NOT NULL,        ORDER_DETAIL VARCHAR (20)  NOT NULL,        SALE_DATE  DATETIME,        PRIMARY KEY (CUST_ID, ORDER_ID) );

此表是第一范式,因为它遵循了第一范式的所有规则。在该表中,主键由CUST_ID和ORDERID组成。 它们是唯一的,假设同一客户将很难订购同样的东西。

然而,该表不是在第二范式,因为有主键和列的部分相关性。CUST_NAME依赖于CUST_ID,并有一个客户的名字和他所购买之间没有真正的联系。订单细节和购买日期也取决于ORDERID,但他们不依赖于CUST_ID,因为有一个CUST_ID和订单的详细信息或SALE_DATE之间没有联系。

为了使这个表符合第二范式,需要的列分在三个表。

首先,创建一个表来存储客户的详细信息如下:

 CREATE TABLE CUSTOMERS(        CUST_ID    INT              NOT NULL,        CUST_NAME VARCHAR (20)      NOT NULL,        PRIMARY KEY (CUST_ID) );

接下来,创建一个表来存储每个订单的详细信息:

 CREATE TABLE ORDERS(        ORDER_ID   INT              NOT NULL,        ORDER_DETAIL VARCHAR (20)  NOT NULL,        PRIMARY KEY (ORDER_ID) );

最后,创建第三个表存储只是CUST_ID和ORDER_ID让所有的客户订单可以跟踪:

 CREATE TABLE CUSTMERORDERS(        CUST_ID    INT              NOT NULL,        ORDER_ID   INT              NOT NULL,        SALE_DATE  DATETIME,        PRIMARY KEY (CUST_ID, ORDER_ID) );

  

从零到一,创造未来!跨零综合IT问题解决服务站,欢迎你的到来。Oracle数据库教程 sql教程 只为你绽放。

本文固定链接: http://kua0.com/2019/01/24/数据库教程-数据库-第二范式(2nf)/

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注