明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

數(shù)據(jù)庫設(shè)計(jì)技巧(一)

[摘要]在動(dòng)態(tài)網(wǎng)站的設(shè)計(jì)中,數(shù)據(jù)庫設(shè)計(jì)的重要性不言而喻。如果設(shè)計(jì)不當(dāng),查詢起來就非常吃力,程序的性能也會(huì)受到影響。無論你使用的是mySQL或者Oracle數(shù)據(jù)庫,通過進(jìn)行正規(guī)化的表格設(shè)計(jì),可以令你的PHP代...
在動(dòng)態(tài)網(wǎng)站的設(shè)計(jì)中,數(shù)據(jù)庫設(shè)計(jì)的重要性不言而喻。如果設(shè)計(jì)不當(dāng),查詢起來就非常吃力,程序的性能也會(huì)受到影響。無
論你使用的是mySQL或者Oracle數(shù)據(jù)庫,通過進(jìn)行正規(guī)化的表格設(shè)計(jì),可以令你的PHP代碼更具可讀性,更容易擴(kuò)展,從而
也會(huì)提升應(yīng)用的性能。

  簡(jiǎn)單說來,正規(guī)化就是在表格設(shè)計(jì)時(shí),消除冗余性和不協(xié)調(diào)的從屬關(guān)系。在本文中,我將通過五個(gè)漸進(jìn)的過程來告訴
你在設(shè)計(jì)中應(yīng)該了解的正規(guī)化技巧。從而建立一個(gè)可行而且
效率高的數(shù)據(jù)庫。本文也會(huì)詳細(xì)分析一下可以利用的關(guān)系類型。

  這里假定我們要建立一個(gè)用戶信息的表格,其中要存儲(chǔ)用戶的名字、公司、公司地址和一些個(gè)人的收藏夾或url。在開
始時(shí),你可能定義一個(gè)如下的表格結(jié)構(gòu):

  零狀態(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

  由于沒有進(jìn)行任何的正規(guī)化處理,我們將這種形式的表稱為零狀態(tài)形式的表。留意其中的url1和url2字段---如果我們
在應(yīng)用中需要第三個(gè)url呢?這樣你就要在表格中多加一列,很明顯,這不是一個(gè)好辦法。如果你要?jiǎng)?chuàng)建一個(gè)富有擴(kuò)展性的
系統(tǒng),你就要考慮使用第一個(gè)正規(guī)化的形式,并且應(yīng)用到該表格中。

  第一級(jí)正規(guī)化形式

  1.消除每個(gè)表格中重復(fù)的組

  2.為每套相關(guān)的數(shù)據(jù)建立一個(gè)獨(dú)立的表格

  3.使用一個(gè)主鍵來標(biāo)識(shí)每套相關(guān)的數(shù)據(jù)

  以上的表格明顯違反了上面第一條的規(guī)定,那么第三條的主鍵又是什么意思呢?很簡(jiǎn)單,它只是在每個(gè)記錄中加入一
個(gè)唯一的、自動(dòng)增加的整型值。通過這個(gè)值,就可以將兩個(gè)姓名一樣的記錄區(qū)分開來。通過應(yīng)用第一級(jí)正規(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)處在第一級(jí)正規(guī)化的形式了,它已經(jīng)解決了url字段的限制問題,不過這樣的處理后又帶來
了一個(gè)新的問題。每次在user表中插入一條記錄的時(shí)候,我們都必須重復(fù)所有的公司和用戶數(shù)據(jù)。這樣不僅令數(shù)據(jù)庫比以
前大了,而且很容易出錯(cuò)。因此還要經(jīng)過第二級(jí)正規(guī)化處理。