資料庫設計四五範式

來源:互聯網
上載者:User
設計|資料|資料庫|資料庫設計 在定義第四個正規化的形式前,我想首先提一下三種基本的資料關係:一對一,一對多和多對多。我們回頭看一下經過第一個正規化的users 表。要是我們將url 的欄位放在一個獨立的表中,每次在users 表中插入一個記錄,我們就會在urls 表中插入一行。我們將得到一個一對一的關係:使用者表中的每一行,都將在urls 表中找到相應的一行。對於我們的應用來說,這既不實用也不標準。

然後看看第二個正規化的例子。對於每個使用者記錄,我們的表格允許有多個urls 的記錄與之關聯。這是一個一對多的關係,這是一個很常見的關係。

對於多對多的關係來說,就有點複雜了。在我們的第三個正規化形式的例子中,我們的一個使用者與很多的url 有關,而我們想將該結構變為允許多個使用者與多個的urls 有關,這樣我們就可以得到一個多對多的結構。在討論前,我們先看看錶格結構會有些什麼變化
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

為了進一步減低資料的冗餘,我們運用第四級正規化形式。我們建立了一個頗奇怪的url_relations 表,裡面的欄位均為主鍵或者foreign key 。通過這個表,我們就可以消除urls 表中的重複項目。以下是第四個正規化形式的具體要求:

第四個正規化形式

1. 在一個多對多的關係中,獨立的實體不能存放在同一個表格中
由於它僅應用於多對多的關係,因此大多數的開發人員可以忽略這條規定。不過在某些情況下,它是非常實用的,這個例子就是這樣,我們通過將相同的實體分離出來,並且將關係移到它們自己的表格中,從而改進了urls 表格。

為了令你更容易明白,我們舉個具體的例子,以下將用一個SQL 陳述式選擇出所有屬於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

如果我們想要遍曆每個人的個人資訊和url 資訊,我們可以這樣做:
SELECT name, url
FROM users, urls, url_relations
Where users.userId = url_relations.relatedUserId AND urls.urlId = url_relations.relatedUrlId


第五級正規化形式

還有一級正規化的形式,它並不常見,有點深奧,並且在大部分的情況下都是不必要的。它的原則是:
1. 原來的表格必須可以通過由它分離出去的表格重新構建
使用這個規定的好處是,你可以確保不會在分離的表格中引入多餘的列,所有你建立的表格結構都與它們的實際需要一樣大。應用這條規定是一個好習慣,不過除非你要處理一個非常大型的資料,否則你將不需要用到它。

希望這篇文章對你有用,並且可以協助你在所有的項目中應用這些正規化的規定。你可能想知道這些方法是從哪來的,我可以告訴你,前面三個正規化的規定是1972 年,Dr. E.F. Codd 在他的論文“進一步正規化資料庫的關聯式模式中”提出的,其餘的規定是經過後來的集合理論和關係數學家理論化的。

評論:正所謂物級必反,將表格分得過細有時並不好,因為這樣需要將各表進行各種的關聯,這會令查詢時變得複雜,而且效率也可能降低,這些正規化的規定可以參考,在實際應用時,要根據項目的大小,必要時可以進行一些測試,以設計出更合理的表格結構。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。