在動態網站的設計中
數據庫設計的重要性不言而喻
如果設計不當
查詢起來就非常吃力
程序的性能也會受到影響
無論你使用的是MySQL或者Oracle數據庫
通過進行正規化的表格設計
可以令你的PHP代碼更具可讀性
更容易擴展
從而也會提升應用的性能
簡單說來正規化就是在表格設計時消除冗余性和不協調的從屬關系在本文中我將通過五個漸進的過程來告訴你在設計中應該了解的正規化技巧從而建立一個可行而且 效率高的數據庫本文也會詳細分析一下可以利用的關系類型
這裡假定我們要建立一個用戶信息的表格其中要存儲用戶的名字公司公司地址和一些個人的收藏夾或url在開始時你可能定義一個如下的表格結構
零狀態形式
users
name company company_address url url
Joe ABC Work Lane
Jill XYZ Job Street
由於沒有進行任何的正規化處理我們將這種形式的表稱為零狀態形式的表留意其中的url和url字段如果我們在應用中需要第三個url呢?這樣你就要在表格中多加一列很明顯這不是一個好辦法如果你要創建一個富有擴展性的系統你就要考慮使用第一個正規化的形式並且應用到該表格中
第一級正規化形式
消除每個表格中重復的組
為每套相關的數據建立一個獨立的表格
使用一個主鍵來標識每套相關的數據
以上的表格明顯違反了上面第一條的規定那麼第三條的主鍵又是什麼意思呢?很簡單它只是在每個記錄中加入一個唯一的自動增加的整型值通過這個值就可以將兩個姓名一樣的記錄區分開來通過應用第一級正規化形式我們得到了以下的表格
users
userId name company company_address url
Joe ABC Work Lane
Joe ABC Work Lane
Jill XYZ Job Street
Jill XYZ Job Street
現在我們的表格可以說已經處在第一級正規化的形式了它已經解決了url字段的限制問題不過這樣的處理後又帶來了一個新的問題每次在user表中插入一條記錄的時候我們都必須重復所有的公司和用戶數據這樣不僅令數據庫比以前大了而且很容易出錯因此還要經過第二級正規化處理
第二級正規化形式
為應用在多條記錄的字段建立獨立的表格
通過一個foreign key來關聯這些表格的值
From:http://tw.wingwit.com/Article/program/Oracle/201311/16547.html