久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔
站長百科 | 數(shù)字化技能提升教程 數(shù)字化時(shí)代生存寶典
首頁
數(shù)字化百科
電子書
建站程序
開發(fā)
服務(wù)器
辦公軟件
開發(fā)教程
服務(wù)器教程
軟件使用教程
運(yùn)營教程
熱門電子書
WordPress教程
寶塔面板教程
CSS教程
Shopify教程
導(dǎo)航
程序頻道
推廣頻道
網(wǎng)賺頻道
人物頻道
網(wǎng)站程序
網(wǎng)頁制作
云計(jì)算
服務(wù)器
CMS
論壇
網(wǎng)店
虛擬主機(jī)
cPanel
網(wǎng)址導(dǎo)航
WIKI使用導(dǎo)航
WIKI首頁
最新資訊
網(wǎng)站程序
站長人物
頁面分類
使用幫助
編輯測試
創(chuàng)建條目
網(wǎng)站地圖
站長百科導(dǎo)航
站長百科
主機(jī)偵探
IDCtalk云說
跨境電商導(dǎo)航
WordPress啦
站長專題
網(wǎng)站推廣
網(wǎng)站程序
網(wǎng)站賺錢
虛擬主機(jī)
cPanel
網(wǎng)址導(dǎo)航專題
云計(jì)算
微博營銷
虛擬主機(jī)管理系統(tǒng)
開放平臺
WIKI程序與應(yīng)用
美國十大主機(jī)
編輯“
Mysql應(yīng)用
”
人物百科
|
營銷百科
|
網(wǎng)賺百科
|
站長工具
|
網(wǎng)站程序
|
域名主機(jī)
|
互聯(lián)網(wǎng)公司
|
分類索引
跳轉(zhuǎn)至:
導(dǎo)航
、?
搜索
警告:
您沒有登錄。如果您做出任意編輯,您的IP地址將會公開可見。如果您
登錄
或
創(chuàng)建
一個(gè)賬戶,您的編輯將歸屬于您的用戶名,且將享受其他好處。
反垃圾檢查。
不要
加入這個(gè)!
<span style="text-align:center; border:1px solid #000; float:right; padding:6px;"><strong>導(dǎo)航:</strong> [[PHP#PHP教程|上一頁]] | {{template:開發(fā)語言導(dǎo)航}}</span> <div style="clear:both;"></div> 在動態(tài)網(wǎng)站的設(shè)計(jì)中,數(shù)據(jù)庫設(shè)計(jì)的重要性不言而喻。如果設(shè)計(jì)不當(dāng),查詢起來就非常吃力,程序的性能也會受到影響。無 論你使用的是mySQL或者Oracle數(shù)據(jù)庫,通過進(jìn)行正規(guī)化的表格設(shè)計(jì),可以令你的PHP代碼更具可讀性,更容易擴(kuò)展,從而 也會提升應(yīng)用的性能。 <br> 簡單說來,正規(guī)化就是在表格設(shè)計(jì)時(shí),消除冗余性和不協(xié)調(diào)的從屬關(guān)系。在本文中,我將通過五個(gè)漸進(jìn)的過程來告訴 你在設(shè)計(jì)中應(yīng)該了解的正規(guī)化技巧。從而建立一個(gè)可行而且 效率高的數(shù)據(jù)庫。本文也會詳細(xì)分析一下可以利用的關(guān)系類型。 <br> 這里假定我們要建立一個(gè)用戶信息的表格,其中要存儲用戶的名字、公司、公司地址和一些個(gè)人的收藏夾或url。在開 始時(shí),你可能定義一個(gè)如下的表格結(jié)構(gòu): <br> 零狀態(tài)形式 <br> users <br> name company company_address url1 url2 <br> Joe ABC 1 Work Lane abc.com xyz.com <br> Jill XYZ 1 Job Street abc.com xyz.com <br> 由于沒有進(jìn)行任何的正規(guī)化處理,我們將這種形式的表稱為零狀態(tài)形式的表。留意其中的url1和url2字段---如果我們 在應(yīng)用中需要第三個(gè)url呢?這樣你就要在表格中多加一列,很明顯,這不是一個(gè)好辦法。如果你要?jiǎng)?chuàng)建一個(gè)富有擴(kuò)展性的 系統(tǒng),你就要考慮使用第一個(gè)正規(guī)化的形式,并且應(yīng)用到該表格中。 <br> 第一級正規(guī)化形式 <br> 1.消除每個(gè)表格中重復(fù)的組 <br> 2.為每套相關(guān)的數(shù)據(jù)建立一個(gè)獨(dú)立的表格 <br> 3.使用一個(gè)主鍵來標(biāo)識每套相關(guān)的數(shù)據(jù) <br> 以上的表格明顯違反了上面第一條的規(guī)定,那么第三條的主鍵又是什么意思呢?很簡單,它只是在每個(gè)記錄中加入一 個(gè)唯一的、自動增加的整型值。通過這個(gè)值,就可以將兩個(gè)姓名一樣的記錄區(qū)分開來。通過應(yīng)用第一級正規(guī)化形式,我們 得到了以下的表格: <br> users <br> userId name company company_address url <br> 1 Joe ABC 1 Work Lane abc.com <br> 1 Joe ABC 1 Work Lane xyz.com <br> 2 Jill XYZ 1 Job Street abc.com <br> 2 Jill XYZ 1 Job Street xyz.com <br> 現(xiàn)在我們的表格可以說已經(jīng)處在第一級正規(guī)化的形式了,它已經(jīng)解決了url字段的限制問題,不過這樣的處理后又帶來 了一個(gè)新的問題。每次在user表中插入一條記錄的時(shí)候,我們都必須重復(fù)所有的公司和用戶數(shù)據(jù)。這樣不僅令數(shù)據(jù)庫比以 前大了,而且很容易出錯(cuò)。因此還要經(jīng)過第二級正規(guī)化處理。 <br> 1.為應(yīng)用在多條記錄的字段建立獨(dú)立的表格 <br> 2.通過一個(gè)foreign key來關(guān)聯(lián)這些表格的值 <br> 我們將url的值放在一個(gè)獨(dú)立的表格中,這樣我們就可以在以后加入更多的數(shù)據(jù),而無需擔(dān)心產(chǎn)生重復(fù)的值。我們還通 過主鍵值來關(guān)聯(lián)這些字段: <br> users <br> userId name company company_address <br> 1 Joe ABC 1 Work Lane <br> 2 Jill XYZ 1 Job Street <br> urls <br> urlId relUserId url <br> 1 1 abc.com <br> 2 1 xyz.com <br> 3 2 abc.com <br> 4 2 xyz.com <br> 如上所示,我們創(chuàng)建了獨(dú)立的表格,users表中的主鍵userid現(xiàn)在與url表中的foreign key relUserId關(guān)聯(lián)。現(xiàn)在的情 況好象已經(jīng)得到了明顯的改善。不過,如果我們要為ABC公司加入一個(gè)員工記錄呢?或者更多,200個(gè)?這樣我們就必須重 復(fù)使用公司名和地址,這明顯不夠冗余。因此我們將應(yīng)用第三級正規(guī)化方法:<br> 第三級正規(guī)化形式 <br> 1.消除不依賴于該鍵的字段 <br> 公司名及地址與User Id都是沒有關(guān)系的,因此它們應(yīng)用擁有自己的公司Id: <br> users <br> userId name relCompId <br> 1 Joe 1 <br> 2 Jill 2 <br> companies <br> compId company company_address <br> 1 ABC 1 Work Lane <br> 2 XYZ 1 Job Street <br> urls <br> urlId relUserId url <br> 1 1 abc.com <br> 2 1 xyz.com <br> 3 2 abc.com <br> 4 2 xyz.com <br> 這樣我們就將companies表中的主鍵comId和users表中名字為relCompId的foreign key關(guān)聯(lián)起來,就算為ABC公司加入 200個(gè)員工,在companies中也只有一條記錄。我們的users和urls表可以不斷地?cái)U(kuò)大,而無需擔(dān)心插入不必要的數(shù)據(jù)。大部 分的開發(fā)者都認(rèn)為經(jīng)過三步的正規(guī)化就足夠了,這個(gè)數(shù)據(jù)庫的設(shè)計(jì)已經(jīng)可以很方便地處理整個(gè)企業(yè)的負(fù)擔(dān),此看法在大多 數(shù)的情況下是正確的。 <br> 我們可以留意一下URL的字段--你注意到數(shù)據(jù)的冗余了嗎?如果給用戶用戶輸入這些url數(shù)據(jù)的HTML頁面是一個(gè)文本 框,可任意輸入的話,這并沒有問題,兩個(gè)用戶輸入同樣收藏夾的概率較少,不過,如果是通過一個(gè)下拉式的菜單,只讓 用戶選擇兩個(gè)url輸入,或者更多一點(diǎn)。這種情況下,我們的數(shù)據(jù)庫還可以進(jìn)行下一級別的優(yōu)化--第四步,對于大多數(shù)的開 發(fā)者來說,這一步都是忽略的,因?yàn)樗蕾囈粋€(gè)很特別的關(guān)系--一個(gè)多對多的關(guān)系,這在我們的應(yīng)用中是還沒有遇到過的. <br> 在定義第四個(gè)正規(guī)化的形式前,我想首先提一下三種基本的數(shù)據(jù)關(guān)系:一對一,一對多和多對多。我們回頭看一下經(jīng) 過第一個(gè)正規(guī)化的users表。要是我們將url的字段放在一個(gè)獨(dú)立的表中,每次在users表中插入一個(gè)記錄,我們就會在urls 表中插入一行。我們將得到一個(gè)一對一的關(guān)系:用戶表中的每一行,都將在urls表中找到相應(yīng)的一行。對于我們的應(yīng)用來 說,這既不實(shí)用也不標(biāo)準(zhǔn)。<br> 然后看看第二個(gè)正規(guī)化的例子。對于每個(gè)用戶記錄,我們的表格允許有多個(gè)urls的記錄與之關(guān)聯(lián)。這是一個(gè)一對多的 關(guān)系,這是一個(gè)很常見的關(guān)系。<br> 對于多對多的關(guān)系來說,就有點(diǎn)復(fù)雜了。在我們的第三個(gè)正規(guī)化形式的例子中,我們的一個(gè)用戶與很多的url有關(guān),而 我們想將該結(jié)構(gòu)變?yōu)樵试S多個(gè)用戶與多個(gè)的urls有關(guān),這樣我們就可以得到一個(gè)多對多的結(jié)構(gòu)。在討論前,我們先看看表 格結(jié)構(gòu)會有些什么變化<br> users <br> userId name relCompId <br> 1 Joe 1 <br> 2 Jill 2 <br> companies <br> compId company company_address <br> 1 ABC 1 Work Lane <br> 2 XYZ 1 Job Street <br> urls <br> urlId url <br> 1 abc.com <br> 2 xyz.com <br> url_relations <br> relationId relatedUrlId relatedUserId <br> 1 1 1 <br> 2 1 2 <br> 3 2 1 <br> 4 2 2 <br> 為了進(jìn)一步減低數(shù)據(jù)的冗余,我們運(yùn)用第四級正規(guī)化形式。我們創(chuàng)建了一個(gè)頗奇怪的url_relations表,里面的字段均 為主鍵或者foreign key。通過這個(gè)表,我們就可以消除urls表中的重復(fù)項(xiàng)目。以下是第四個(gè)正規(guī)化形式的具體要求:<br> 第四個(gè)正規(guī)化形式<br> 1.在一個(gè)多對多的關(guān)系中,獨(dú)立的實(shí)體不能存放在同一個(gè)表格中<br> 由于它僅應(yīng)用于多對多的關(guān)系,因此大多數(shù)的開發(fā)者可以忽略這條規(guī)定。不過在某些情況下,它是非常實(shí)用的,這個(gè) 例子就是這樣,我們通過將相同的實(shí)體分離出來,并且將關(guān)系移到它們自己的表格中,從而改進(jìn)了urls表格。<br> 為了令你更容易明白,我們舉個(gè)具體的例子,以下將用一個(gè)SQL語句選擇出所有屬于joe的urls: <br> SELECT name, url FROM users, urls, url_relationsswheresurl_relations.relatedUserId = 1 AND users.userId = 1 AND urls.urlId = url_relations.relatedUrlId <br> 如果我們想要遍歷每個(gè)人的個(gè)人信息和url信息,我們可以這樣做: <br> SELECT name, url FROM users, urls, url_relationsswheresusers.userId = url_relations.relatedUserId AND urls.urlId = url_relations.relatedUrlId <br> 第五級正規(guī)化形式 <br> 還有一級正規(guī)化的形式,它并不常見,有點(diǎn)深奧,并且在大部分的情況下都是不必要的。它的原則是: <br> 1.原來的表格必須可以通過由它分離出去的表格重新構(gòu)建 <br> 使用這個(gè)規(guī)定的好處是,你可以確保不會在分離的表格中引入多余的列,所有你創(chuàng)建的表格結(jié)構(gòu)都與它們的實(shí)際需要 一樣大。應(yīng)用這條規(guī)定是一個(gè)好習(xí)慣,不過除非你要處理一個(gè)非常大型的數(shù)據(jù),否則你將不需要用到它。 <br> 希望這篇文章對你有用,并且可以幫助你在所有的項(xiàng)目中應(yīng)用這些正規(guī)化的規(guī)定。你可能想知道這些方法是從哪來 的,我可以告訴你,前面三個(gè)正規(guī)化的規(guī)定是1972年,Dr. E.F. Codd在他的論文“進(jìn)一步正規(guī)化數(shù)據(jù)庫的關(guān)系模型中”提 出的,其余的規(guī)定是經(jīng)過后來的集合理論和關(guān)系數(shù)學(xué)家理論化的。評論:正所謂物級必反,將表格分得過細(xì)有時(shí)并不好, 因?yàn)檫@樣需要將各表進(jìn)行各種的關(guān)聯(lián),這會令查詢時(shí)變得復(fù)雜,而且效率也可能降低,這些正規(guī)化的規(guī)定可以參考,在實(shí) 際應(yīng)用時(shí),要根據(jù)項(xiàng)目的大小,必要時(shí)可以進(jìn)行一些測試,以設(shè)計(jì)出更合理的表格結(jié)構(gòu)。 <br> [[category:PHP教程]] [[category:MYSQL教程]]
摘要:
請注意,您對站長百科的所有貢獻(xiàn)都可能被其他貢獻(xiàn)者編輯,修改或刪除。如果您不希望您的文字被任意修改和再散布,請不要提交。
您同時(shí)也要向我們保證您所提交的內(nèi)容是您自己所作,或得自一個(gè)不受版權(quán)保護(hù)或相似自由的來源(參閱
Wordpress-mediawiki:版權(quán)
的細(xì)節(jié))。
未經(jīng)許可,請勿提交受版權(quán)保護(hù)的作品!
取消
編輯幫助
(在新窗口中打開)
本頁使用的模板:
模板:開發(fā)語言導(dǎo)航
(
編輯
)
取自“
http://www.kktzf.com.cn/wiki/Mysql應(yīng)用
”