Mysql的三正規化設計和反正規化設計

2021-10-10 15:35:20 字數 1693 閱讀 3577

第一正規化

第一正規化(1nf)要求資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值。

若某一列有多個值,可以將該列單獨拆分成乙個實體,新實體和原實體間是一對多的關係。

在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫。

第一正規化是最基本的正規化。如果資料庫表中的所有字段值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。

第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統中需要用到「位址」這個屬性,本來直接將「位址」屬性設計成乙個資料庫表的字段就行。但是如果系統經常會訪問「位址」屬性中的「城市」部分,那麼就非要將「位址」這個屬性重新拆分為省份、城市、詳細位址等多個部分進行儲存,這樣在對位址中某一部分操作的時候將非常方便。這樣設計才算滿足了資料庫的第一正規化。

第二正規化

滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。

第二正規化要求實體中沒一行的所有非主屬性都必須完全依賴於主鍵;即:非主屬性必須完全依賴於主鍵。

完全依賴:主鍵可能由多個屬性構成,完全依賴要求不允許存在非主屬性依賴於主鍵中的某一部分屬性。

若存在哪個非主屬性依賴於主鍵中的一部分屬性,那麼要將發生部分依賴的這一組屬性單獨新建乙個實體,並且在舊實體中用外來鍵與新實體關聯,並且新實體與舊實體間是一對多的關係。

第二正規化在第一正規化的基礎之上更進一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關(主要針對聯合主鍵而言)。也就是說在乙個資料庫表中,乙個表中只能儲存一種資料,不可以把多種資料儲存在同一張資料庫表中。

第三正規化

滿足第三正規化必須先滿足第二正規化。

第三正規化要求:實體中的屬性不能是其他實體中的非主屬性。因為這樣會出現冗餘。即:屬性不依賴於其他非主屬性。

如果乙個實體**現其他實體的非主屬性,可以將這兩個實體用外來鍵關聯,而不是將另一張表的非主屬性直接寫在當前表中。

第三正規化需要確保資料表中的每一列資料都和主鍵直接相關,而不能間接相關。

不滿足正規化的模型,就是反正規化模型。

反正規化化是針對正規化化而言的,在前面介紹了資料庫設計的正規化,所謂的反範

式化就是為了效能和讀取效率的考慮而適當的對資料庫設計正規化的要求進行違

反,而允許存在少量的資料冗餘,換句話來說反正規化化就是使用空間來換取時

間。

反正規化跟正規化所要求的正好相反,在反正規化的設計模式,我們可以允許適當的資料的冗餘,用這個冗餘去取運算元據時間的縮短。本質上就是用空間來換取時間,把資料冗餘在多個表中,當查詢時可以減少或者是避免表之間的關聯;

兩者的對比

正規化化模型

資料沒有冗餘,更新容易

當表的數量比較多,

查詢設計需要很多關聯模型(join)時,會導致查詢效能低下

反正規化化模型

資料冗餘將帶來很好的讀取效能

(因為不需要join很多表,而且通常反正規化模型很少做更新操作)

需要維護冗餘資料,從目前nosql的發展可以看到,

對磁碟空間的消耗是可以接受的

mysql 反正規化 mysql 正規化和反正規化

第一正規化 1nf 強調的是列的原子性,即列不能夠再分成其他幾列。第二正規化 2nf 首先是 2nf,另外包含兩部分內容一是表必須有乙個主鍵 二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。第三正規化 3nf 首先是 2nf,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。...

MySQL三大正規化和反正規化

1.第一正規化 確保資料表中每列 字段 的原子性。如果資料表中每個欄位都是不可再分的最小資料單元,則滿足第一正規化。比如位址可再分 例如 user使用者表,包含欄位id,username,password 2.第二正規化 在第一正規化的基礎上更進一步,目標是確保表中的每列都和主鍵相關。如果乙個關係滿...

MySQL三大正規化和反正規化

1.第一正規化確保資料表中每列 字段 的原子性。如果資料表中每個欄位都是不可再分的最小資料單元,則滿足第一正規化。例如 user使用者表,包含欄位id,username,password 2.第二正規化在第一正規化的基礎上更進一步,目標是確保表中的每列都和主鍵相關。如果乙個關係滿足第一正規化,並且除...