轉載:

一、圖書信息的直觀表示方法:

書名

出版社

出版年份

第一作者

第二作者

白盒測試

科學出版社

2007

老師

老師

數據庫管理

魅力出版社

2000

老師

李四

王五

二、范式的學術定義

1.       第一范式:

消除重復的組,從而所有表中的所有記錄可以被每個表中的主鍵唯一標識。也就是:非主鍵的所有字段必須依賴于主鍵。

2.       第二范式

所有的非鍵值必須完全依賴于主鍵,不允許部分依賴

3.       第三范式

消除傳遞依賴。

三、圖書信息要滿足第一范式:

1.   內容相識的數據列必須消除

2.   必須為每一組相關數據分別創建一個數據表

3.   每條數據記錄必須用一個主鍵來標識

Title

書名

出版社

出版年份

第一作者

第二作者

白盒測試

科學出版社

2007

老師

老師

數據庫管理

魅力出版社

2000

老師

李四

王五

Title

ID

書名

出版社

出版年份

作者

1

白盒測試

科學出版社

2007

老師

2

白盒測試

科學出版社

2007

老師

3

數據庫管理

魅力出版社

2000

老師

4

數據庫管理

魅力出版社

2000

李四

5

數據庫管理

魅力出版社

2000

王五

四、圖書信息要滿足第二范式:

1.         只要數據列里的內容出現重復,就應該把數據表拆分為多個表

2.       拆分形成的數據表必須用外鍵關聯起來

在本例中,Title表中的書名是重復的,原因是因為要表現與作者的關系才重復的,所以要消除它,就需要把作者的信息拆分出來:

Title

ID

書名

出版社

出版年份

1

白盒測試

科學出版社

2007

2

數據庫管理

魅力出版社

2000

Authors

ID

TitleID(外鍵)

作者

1

1

老師

2

1

老師

3

2

老師

4

2

李四

5

2

王五

在作者表中,名字還是存在重復,所以可以進一步改進為三個表:

Title

ID

書名

出版社

出版年份

1

白盒測試

科學出版社

2007

2

數據庫管理

魅力出版社

2000

Authors

ID

姓名

1

老師

2

老師

3

李四

4

王五

Rel_title_author

TitleID (外鍵)

AuthorID (外鍵)

1

1

1

2

2

1

2

3

2

4

五、圖書信息要滿足第三范式:

與主鍵沒有直接關系的數據列必須消除(創建一個表來存放他們)。 如:本例中出版社與書的名字沒有必然的聯系

Title

ID

書名

PublisherID (外鍵)

出版年份

1

白盒測試

1

2007

2

數據庫管理

2

2000

Authors

ID

姓名

1

老師

2

老師

3

李四

4

王五

Rel_title_author

TitleID (外鍵)

AuthorID (外鍵)

1

1

1

2

2

1

2

3

2

4

Publishers

ID

名稱

1

科學出版社

2

魅力出版社

總結:

在實際工作中,往往要等到數據庫里已經有了足夠多的測試數據之后才會注意到種種冗余的現象,然后才會清楚地知道怎樣拆分數據表最合適。