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

2021-10-18 02:39:40 字數 1211 閱讀 4563

1.第一正規化(1nf)(列不能再拆分)

原子性,字段不可分(列的資訊),只要是關係型資料庫,就自動滿足1nf;

2.第二正規化(2nf)(主鍵唯一,且被依賴)

在第一正規化基礎上建立的,即滿足第二正規化的必須先滿足第一正規化。要求db表中的每個例項或行必須可以被唯一區分,通常設計乙個主鍵來實現,其他屬性完全依賴主鍵。

3.第三正規化(3nf)(表與其他表間沒有關聯)

必須滿足第二正規化,要求乙個資料庫表中不包含已在其他表中已包含的非主鍵字段。即:表的資訊,如果能夠被推導出來,就不應該單獨設計乙個欄位來存放(能盡量外來鍵join就用外來鍵join)。很多時候,為滿足第三正規化往往會把一張表分成多張表,如:

4.反正規化

通過增加冗餘或重複的資料來提高資料庫的讀效能。

具體做法:在概念資料模型設計時遵守第三正規化,降低正規化標準的工作放到物理資料模型設計時考慮。降低正規化就是增加字段,減少了查詢時的關聯,提高查詢效率,因為在資料庫的操作中查詢的比例要遠遠大於dml的比例。但是反正規化化一定要適度,並且在原本已滿足三正規化的基礎上再做調整。

實際,比如:可以減少關聯查詢時,jion表的次數,如:在3中,增加欄位role_name。

5.正規化化優點及缺點:

優點:.更新操作通常比反正規化化要快;

.正規化化的表通常更小,沒有資料冗餘,更省資料庫空間,同時可以放在記憶體,所以執行操作會更快。

.很少有多餘資料意味著檢索列表資料更少需要distinct或group by語句。

.資料較好的正規化化,只有很少或沒有重複資料,所以,只需要修改更少的資料。

缺點:.正規化化schema通常需要關聯,可能使一些索引策略無效。

.正規化等級越高,設計出來的表越多,可能會增加查詢需要的時間。

6.反正規化化優點及缺點:

優點:.可以很好避免關聯。

.如果不需要關聯表,對大部分查詢最差情況,沒有使用索引,全表掃瞄,當資料比記憶體大時,可能比關聯快,避免隨機io

7.實際經驗

實際中,不會極端使用正規化化或反正規化化schema,可能使用部分正規化化schema、快取表、及其他技巧。

最常見反正規化化資料方法:複製或快取,在不同表中儲存相同的特定列,比如:實際業務涉及的表非常多,表間連線會比較多,對錶的操作要盡量快,通常會使用反正規化設計,用空間換時間,把資料冗餘在多張表中,查詢時可以減少或避免表間關聯。

mysql 正規化化 Mysql正規化與反正規化

第一正規化 1nf 第一正規化,強調屬性的原子性約束,要求屬性具有原子性,不可再分解。第二正規化 2nf 第二正規化,強調記錄的唯一性約束,表必須有乙個主鍵,並且沒有包含在主鍵中的列必須完全依賴於主鍵,而不能只依賴於主鍵的一部分。舉個例子 版本表 版本編碼,版本名稱,產品編碼,產品名稱 其中主鍵是 ...

mysql 逆正規化化 mysql優化

一 mysql優化主要體現在四個方面。設計 儲存引擎 設計型別 正規化與逆正規化 功能 索引 快取 分區分表 合理sql 測試 經驗 1 儲存引擎 在建立表的時候我們使用sql語句,create table tablename engine myisam innodb 儲存引擎是engine還是in...

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

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