設計|資料|資料庫|資料庫設計 1. 為應用在多條記錄的欄位建立獨立的表格
2. 通過一個foreign key 來關聯這些表格的值
我們將url 的值放在一個獨立的表格中,這樣我們就可以在以後加入更多的資料,而無需擔心產生重複的值。我們還通過主索引值來關聯這些欄位:
users
userId name company company_address
1 Joe ABC 1 Work Lane
2 Jill XYZ 1 Job Street
urls
urlId relUserId url
1 1 abc.com
2 1 xyz.com
3 2 abc.com
4 2 xyz.com
如上所示,我們建立了獨立的表格,users 表中的主鍵userid 現在與urls 表中的foreign key relUserId 關聯。現在的情況好象已經得到了明顯的改善。不過,如果我們要為AB一般股份有限公司加入一個員工記錄呢?或者更多,200 個?這樣我們就必須重複使用公司名和地址,這明顯不夠冗餘。因此我們將應用第三級正規化方法:
第三級正規化形式
1. 消除不依賴於該鍵的欄位
公司名及地址與User Id都是沒有關係的,因此它們應用擁有自己的公司Id:
users
userId name relCompId
1 Joe 1
2 Jill 2
companies
compId company company_address
1 ABC 1 Work Lane
2 XYZ 1 Job Street
urls
urlId relUserId url
1 1 abc.com
2 1 xyz.com
3 2 abc.com
4 2 xyz.com
這樣我們就將companies 表中的主鍵comId 和users 表中名字為relCompId 的foreign key 關聯起來,就算為AB一般股份有限公司加入200 個員工,在companies 中也只有一條記錄。我們的users 和urls 表可以不斷地擴大,而無需擔心插入不必要的資料。大部分的開發人員都認為經過三步的正規化就足夠了,這個資料庫的設計已經可以很方便地處理整個企業的負擔,此看法在大多數的情況下是正確的。
我們可以留意一下URL 的欄位--你注意到資料的冗餘了嗎?如果給使用者使用者輸入這些url 資料的HTML 頁面是一個文字框,可任意輸入的話,這並沒有問題,兩個使用者輸入同樣收藏夾的機率較少,不過,如果是通過一個下拉式的菜單,只讓使用者選擇兩個url 輸入,或者更多一點。這種情況下,我們的資料庫還可以進行下一層級的最佳化--第四步,對於大多數的開發人員來說,這一步都是忽略的,因為它要依賴一個很特別的關係--一個多對多的關係,這在我們的應用中是還沒有遇到過的.