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

2021-10-19 01:25:51 字數 967 閱讀 2887

第一正規化(1nf)

強調的是列的原子性,即列不能夠再分成其他幾列。

第二正規化(2nf)

首先是 2nf,另外包含兩部分內容一是表必須有乙個主鍵;二是沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。

第三正規化(3nf)

首先是 2nf,另外非主鍵列必須直接依賴於主鍵,不能存在傳遞依賴。即不能存在:非主鍵列 a 依賴於非主鍵列 b,非主鍵列 b 依賴於主鍵的情況。

第三正規化通常已經可以滿足業務需求了,表之間的關係也比較清楚了,容易維護。但是為什麼要反正規化呢?

首先我們需要了解到定義資料庫正規化的歷史背景,在20世紀70年代到80年代正規化基本完善定型。在那個時候的系統下:乙個硬碟的大小有限,一般也就幾百兆(**也比較高),上網的人也少,所以正規化的理論強調減少依賴,降低冗餘節省空間的使用。而現在最普通的硬碟都是500g,大一點的就上t了而且**便宜,同時上網人數也增多了,資料庫面臨則高併發,業務邏輯複雜,低延遲的要求。很難在遵循這正規化的基礎上進行資料庫設計開發,那麼適當的降低正規化,增加冗餘,用空間來換時間是值得的。最低可以把正規化降低到1nf。

通常在設計資料庫時遵循以下原則:

1.核心業務使用正規化。在類似交易有關的這種敏感核心業務中,強調資料安全和一致性,需要遵循正規化保證資料唯一和一致。具體什麼是核心業務視情況而定。

3.空間換時間,冗餘換效率。由於一條可見的記錄被拆分到多個表中記錄,當資料量比較大的時候,聯表查詢就比較費時,sql語句也變的比較複雜,難於優化。此時就需要適當的冗餘了。在統計報表,檢視中就是對這一條規則的體現。統計報表通常會對很多列,有的時候多達上百列,需要對幾個十幾個表進行聯表,數度緩慢,使用人數一多可能會時資料庫伺服器宕機。這種情況就需要使用冗餘表了,冗餘表一般符合第一和第二正規化。冗餘表一邊是定期轉儲。

4.避免不必要的冗餘。正規化理論不是說反就反的,反正規化理論不是不要正規化,而是在必要時建立冗餘表或者總結表。不必要的冗餘任然是要避免的。所有的規則都是有使用場景的,我們不應該固守規則,在某些情況下,應懂得變通。

MySql 正規化和反正規化

正規化和反正規化 設計關係型資料庫時,需要遵從不同的規範,設計合理的關係型資料庫,不同的規範被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘約小。在關係型資料庫中有六中正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf bcnf,第四正規化 4nf 第五正規化 5nf...

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

1.第一正規化 1nf 列不能再拆分 原子性,字段不可分 列的資訊 只要是關係型資料庫,就自動滿足1nf 2.第二正規化 2nf 主鍵唯一,且被依賴 在第一正規化基礎上建立的,即滿足第二正規化的必須先滿足第一正規化。要求db表中的每個例項或行必須可以被唯一區分,通常設計乙個主鍵來實現,其他屬性完全依...

mysql的正規化 Mysql正規化與反正規化的利弊

mysql正規化與反正規化的利弊 一 三大正規化 第一正規化 1nf是對屬性的原子性,要求屬性具有原子性,不可再分解 第一正規化是最基本的正規化。如果資料庫表中的所有字段值都是不可分解的原子值,就說明該資料庫表滿足了第一正規化。資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原...