close

1.對資料表做 1NF

  • Table 中有Primary Key且其他所有欄位都需相依於Primary Key欄位

  • 每個欄位都指儲存單一值(ex.某欄位紀錄姓名但不能在此欄位紀錄兩個人以上姓名)

  • Table中沒有無意義之相同欄位ex.Name1 , Name 2

 

訂單編號

客戶名稱

員工編號

業務員

書號

書籍名稱

數量

ID101

十全書店

1032

Melo

F103

F102

Linux

PHP

20

80

ID103

愛買

1031

James

F102

PHP

20

 

以上資料表違反1NF

 

轉換為符合1NF

將書籍名稱(重複資料)改成存到不同的紀錄中

並替primary key打上* (訂單編號+書號)

*訂單編號

*書號

客戶名稱

員工編號

業務員

書籍名稱

數量

ID101

F103

十全書店

1032

Melo

Linux

20

ID101

F102

十全書店

1032

Melo

PHP

80

ID103

F102

愛買

1031

James

PHP

20


 

2.解釋何為部分相依

  • 部分相依指某些欄位只與Primary Key某些欄位相依

  • 部分相依只會在primary key為多欄位形成時發生

 

以前例子而言,部分相依的部分如下:

  • "客戶名稱" 只與primary key的 "訂單編號" 相依。

  • “書籍名稱” 只與primary key的 "書號" 相依。

 

部分相依產生之問題:

  • 新增一筆 "書籍名稱":ASP.NET書籍,但因為沒有任何客戶訂購,

導致Primary key其中之一的 "訂單編號" 沒有值,這是不允許的。

 

3. 對資料表做 2NF

  • 必須符合1NF

  • 各欄位與Primary Key欄位間需要沒有部分相依

 

針對以下表格做2NF

*訂單編號

*書號

客戶名稱

員工編號

業務員

書籍名稱

數量

ID101

F103

十全書店

1032

Melo

Linux

20

ID101

F102

十全書店

1032

Melo

PHP

80

ID103

F102

愛買

1031

James

PHP

20

 

我們要去除部分相依性只需要將部分相依欄位拆成另外資料表即可。

以此例子而言,部分相依的部分如下:

  • "客戶名稱" 只與primary key的 "訂單編號" 相依。

  • “書籍名稱” 只與primary key的 "書號" 相依。

 

第一步: 將"書號" 與 "書籍名稱" 拆成一張表(但不包含數量)。

note:不包含數量原因為會違反1NF,因為萬一有同一本書但不同數量會有多筆同樣資料

ex.PHP有人訂20有人訂80等等。

 

書籍資料表

*書號

書籍名稱

F103

Linux

F102

PHP

 

第二步: 將"訂單編號" 與 “客戶名稱” 拆成一張表。

note:原因 "客戶名稱" 只與primary key的 "訂單編號" 相依。

 

訂單明細資料表

*訂單編號

客戶名稱

員工編號

業務員

ID101

十全書店

1032

Melo

ID103

愛買

1032

Melo
 

 

第三步:primary key(*訂單編號,*書號)與剩下的”數量”欄位自成一張表

訂單細目資料表

*訂單編號

*書號

數量

ID101

F103

20

ID101

F102

80

ID103

F102

20


 

4. 間接相依

A欄位與B欄位相依,B欄位與C欄位相依,所以A與C欄位間接相依

 

訂單明細資料表

*訂單編號

客戶編號

客戶名稱

員工編號

業務員

ID101

C002

十全書店

1032

Melo

ID103

C005

愛買

1032

Melo

 

  • "客戶名稱"與"客戶編號"相依 (與primary key無關)

  • "員工編號"與"業務員"相依(與primary key無關)

  • 客戶編號,客戶名稱,員工編號,業務員 都相依於 "訂單編號" (與primary key有關)

 

整理出相依關係如下:(-->:相依)

 

客戶名稱-->客戶編號--> 訂單編號 <--業務員<--員工編號


 

5.對資料表做 3NF

  • 符合2NF

  • 各欄位與primary key欄位間沒有間接相依

 

去除間接相依如同去除部分相依一樣,所以我們可以將"訂單明細資料表"拆分如下:

 

訂單明細資料表

*訂單編號

客戶編號

客戶名稱

員工編號

業務員

ID101

C002

十全書店

1032

Melo

ID103

C005

愛買

1032

Melo

 

3NF 後如下: 

 

員工資料表 (業務員<--員工編號)

員工編號

業務員

1032

Melo

1032

Melo

 

客戶資料表(客戶名稱-->客戶編號)

客戶編號

客戶名稱

C002

十全書店

C005

愛買

 

訂單資料表

*訂單編號

客戶編號

員工編號

ID101

C002

1032

ID103

C005

1032



 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()