第一范式(1NF)設(shè)置了一個(gè)有組織的數(shù)據(jù)庫(kù)非常基本的規(guī)則:
定義所需要的數(shù)據(jù)項(xiàng),因?yàn)樗鼈兂蔀樵诒碇械牧?。放在一個(gè)表中的相關(guān)的數(shù)據(jù)項(xiàng)。
確保有數(shù)據(jù)沒(méi)有重復(fù)的組。
確保有一個(gè)主鍵。
必須定義的數(shù)據(jù)項(xiàng)。這要求我們數(shù)據(jù)要被存儲(chǔ),組織數(shù)據(jù)到列,限定數(shù)據(jù)的每一列包含什么類(lèi)型,最后把相關(guān)列到自己的表中。
例如,把所有涉及會(huì)議地點(diǎn)列到地點(diǎn)表,那些有關(guān)會(huì)員在會(huì)員明細(xì)表,等等。
下一步驟是確保有數(shù)據(jù)的無(wú)重復(fù)組??紤]到我們有如下表:
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), ORDERS VARCHAR(155) );
因此,如果我們填充這個(gè)表一個(gè)客戶(hù)有多個(gè)訂單,那么數(shù)據(jù)如下:
| ID | NAME | AGE | ADDRESS | ORDERS |
|---|---|---|---|---|
| 100 | Sachin | 36 | Lower West Side | Cannon XL-200 |
| 100 | Sachin | 36 | Lower West Side | Battery XL-200 |
| 100 | Sachin | 36 | Lower West Side | Tripod Large |
但按照1NF,我們需要確保數(shù)據(jù)沒(méi)有重復(fù)的組。因此,讓我們分解上面的表格分為兩部分,并使用一個(gè)鍵加入行列如下:
CUSTOMERS 表:
CREATE TABLE CUSTOMERS( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), PRIMARY KEY (ID) );
此表將有以下記錄:
| ID | NAME | AGE | ADDRESS |
|---|---|---|---|
| 100 | Sachin | 36 | Lower West Side |
ORDERS 表 :
CREATE TABLE ORDERS( ID INT NOT NULL, CUSTOMER_ID INT NOT NULL, ORDERS VARCHAR(155), PRIMARY KEY (ID) );
此表將具有以下記錄:
| ID | CUSTOMER_ID | ORDERS |
|---|---|---|
| 10 | 100 | Cannon XL-200 |
| 11 | 100 | Battery XL-200 |
| 12 | 100 | Tripod Large |
第一范式的最終規(guī)則,創(chuàng)建一個(gè)主鍵,我們已經(jīng)在每個(gè)表中創(chuàng)建主鍵了。