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