數據庫 - 第二範式(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) );

0 條評論,你可以發表評論,我們會進行改進
Comment author placeholder