解讀數(shù)據(jù)庫(kù)設(shè)計(jì)正規(guī)化的五大范式(2)_Mssql數(shù)據(jù)庫(kù)教程
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!
推薦:數(shù)據(jù)庫(kù)用SQL語(yǔ)法大全1、建表格: createtabletable_name(column1datatype[notnull][notnullprimarykey],column2datatype[notnull],...) 說(shuō)明: datatype--是資料的格式,詳見(jiàn)表。 nutnull--可不可以允許資料有空的(尚未有資料填入)。 primarykey--是本表的主鍵。 2、更改表
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 url
1 abc.com
2 xyz.com
url_relations
relationId relatedUrlId relatedUserId
1 1 1
2 1 2
3 2 1
4 2 2
為了進(jìn)一步減低數(shù)據(jù)的冗余,我們運(yùn)用第四級(jí)正規(guī)化形式。我們創(chuàng)建了一個(gè)頗奇怪的url_relations表,里面的字段均為主鍵或者foreign key。通過(guò)這個(gè)表,我們就可以消除urls表中的重復(fù)項(xiàng)目。以下是第四個(gè)正規(guī)化形式的具體要求:
第四個(gè)正規(guī)化形式
1.在一個(gè)多對(duì)多的關(guān)系中,獨(dú)立的實(shí)體不能存放在同一個(gè)表格中
由于它僅應(yīng)用于多對(duì)多的關(guān)系,因此大多數(shù)的開(kāi)發(fā)者可以忽略這條規(guī)定。不過(guò)在某些情況下,它是非常實(shí)用的,這個(gè)例子就是這樣,我們通過(guò)將相同的實(shí)體分離出來(lái),并且將關(guān)系移到它們自己的表格中,從而改進(jìn)了urls表格。
為了令你更容易明白,我們舉個(gè)具體的例子,以下將用一個(gè)SQL語(yǔ)句選擇出所有屬于joe的urls:
SELECT name, url FROM users, urls, url_relations WHERE url_relations.relatedUserId = 1 AND users.userId = 1 AND urls.urlId = url_relations.relatedUrlId
如果我們想要遍歷每個(gè)人的個(gè)人信息和url信息,我們可以這樣做:
SELECT name, url FROM users, urls, url_relations WHERE users.userId = url_relations.relatedUserId AND urls.urlId = url_relations.relatedUrlId
第五級(jí)正規(guī)化形式
還有一級(jí)正規(guī)化的形式,它并不常見(jiàn),有點(diǎn)深?yuàn)W,并且在大部分的情況下都是不必要的。它的原則是:
1.原來(lái)的表格必須可以通過(guò)由它分離出去的表格重新構(gòu)建
使用這個(gè)規(guī)定的好處是,你可以確保不會(huì)在分離的表格中引入多余的列,所有你創(chuàng)建的表格結(jié)構(gòu)都與它們的實(shí)際需要一樣大。應(yīng)用這條規(guī)定是一個(gè)好習(xí)慣,不過(guò)除非你要處理一個(gè)非常大型的數(shù)據(jù),否則你將不需要用到它。
希望這篇文章對(duì)你有用,并且可以幫助你在所有的項(xiàng)目中應(yīng)用這些正規(guī)化的規(guī)定。你可能想知道這些方法是從哪來(lái)的,我可以告訴你,前面三個(gè)正規(guī)化的規(guī)定是1972年,Dr. E.F. Codd在他的論文“進(jìn)一步正規(guī)化數(shù)據(jù)庫(kù)的關(guān)系模型中”提出的,其余的規(guī)定是經(jīng)過(guò)后來(lái)的集合理論和關(guān)系數(shù)學(xué)家理論化的。 評(píng)論:正所謂物級(jí)必反,將表格分得過(guò)細(xì)有時(shí)并不好,因?yàn)檫@樣需要將各表進(jìn)行各種的關(guān)聯(lián),這會(huì)令查詢時(shí)變得復(fù)雜,而且效率也可能降低,這些正規(guī)化的規(guī)定可以參考,在實(shí)際應(yīng)用時(shí),要根據(jù)項(xiàng)目的大小,必要時(shí)可以進(jìn)行一些測(cè)試,以設(shè)計(jì)出更合理的表格結(jié)構(gòu)。
分享:解決SQLServer2000因登陸失敗無(wú)法啟動(dòng)服務(wù)的方法解決方法: 1、開(kāi)始--設(shè)置--控制面板--管理工具--服務(wù) (Run --鍵入 services.msc) 。 2、選擇MSSQLSERVER服務(wù),右鍵“屬性”--“登錄”,選擇登錄選項(xiàng)。將登錄帳戶改為本地系統(tǒng)帳戶。 3、重啟MSSQLSERVER服務(wù)。
相關(guān)Mssql數(shù)據(jù)庫(kù)教程:
- sql 語(yǔ)句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
- sql刪除重復(fù)數(shù)據(jù)的詳細(xì)方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無(wú)法查看數(shù)據(jù)庫(kù),提示 無(wú)法為該請(qǐng)求檢索數(shù)據(jù) 錯(cuò)誤916解決方法
- SQLServer日志清空語(yǔ)句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲(chǔ)過(guò)程參數(shù)的用法實(shí)例詳解
Mssql數(shù)據(jù)庫(kù)教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫(kù)教程推薦
- sql2008安裝后服務(wù)器改名造成名稱不一致解決方法
- 使用SQL Server 2008進(jìn)行服務(wù)器合并
- 詳解SQL存儲(chǔ)過(guò)程
- 刪除SQL Server日志的方法
- 解決SQLServer2000因登陸失敗無(wú)法啟動(dòng)服務(wù)的方法
- SQL Server 2005改進(jìn)后的幾個(gè)實(shí)用新特性
- 關(guān)于Oracle與SQL Server數(shù)據(jù)庫(kù)鏡像的對(duì)比
- 解析SQL Server 2008企業(yè)級(jí)新特性
- 用SQL Server Having計(jì)算列和平均值
- 解析使用 SQL Server 數(shù)據(jù)庫(kù)查詢累計(jì)值的方法
猜你也喜歡看這些
- jdbc調(diào)用mysql存儲(chǔ)過(guò)程實(shí)現(xiàn)代碼
- MySQL前綴索引導(dǎo)致的慢查詢分析總結(jié)
- MySQL無(wú)法啟動(dòng)1067錯(cuò)誤的解決方法
- mysql中text與varchar與char的區(qū)別
- 深入mysql "ON DUPLICATE KEY UPDATE" 語(yǔ)法的分析
- 總結(jié)MySQL建表、查詢優(yōu)化的一些實(shí)用小技巧
- 解析mysql與Oracle update的區(qū)別
- 用MyEclipse配置DataBase Explorer(圖示)
- MySQL查詢優(yōu)化:用子查詢代替非主鍵連接查詢實(shí)例介紹
- 解析SQLite中的常見(jiàn)問(wèn)題與總結(jié)詳解