SQL 2NF第二范式

SQL 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和ORDER_ID组成。假设相同的顾客很少会订购相同的商品,这两个组合是唯一的。

然而,该表不符合第二范式,因为存在主键和列的部分依赖关系。CUST_NAME依赖于CUST_ID,而顾客的名字与他购买的物品之间没有真正的联系。订单详情和购买日期也依赖于ORDER_ID,但它们不依赖于CUST_ID,因为CUST_ID与ORDER_DETAIL或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)
);
—— 完 ——
相关推荐
评论

立 为 非 似

中 谁 昨 此

宵 风 夜 星

。 露 , 辰

文章点击榜

细 无 轻 自

如 边 似 在

愁 丝 梦 飞

。 雨 , 花