我們都知道在建立資料表中需要遵循一定的規則,在運用關係型資料庫中的這種規則就稱為正規化,所以要建立合理的資料表就需要遵循這些規則。
首先先來說說資料庫設計中存在哪些設計正規化:最多使用的是3nf,除此之外還有針對多值依賴的第四正規化,連線依賴的第五正規化,dk正規化和第六正規化。
好了,廢話不多說了,今天重點介紹下資料庫設計中的三大正規化:
1nf 屬性的原子性
舉個例子:
id 學號 姓名 位址 出生年月日 這個還可以 將 位址 和 出生年月日進行拆分 不符合第一正規化
id 學號 姓名 省份 市區 縣區 年 月 日 字段不能再拆分 這就是符合第一正規化
第一正規化作為資料庫中最基本的正規化,要求資料表中所有的字段都是不可分割的基本資料項,也就是原子性的特徵,比如上例中的位址可以再拆分為 省 市 縣區。
2nf 實體唯一性
同樣也是來個例子:
學號 課程號 姓名 學分 這裡邊 學號 依賴於姓名 學分 依賴於 課程號
問題:
1.每行會存在相同資訊
2.刪除 成績容易把課程資訊乾掉
3.如果學生沒選課程 資料庫中就不存在該學生的姓名
4.調整學分 所有的行都得更新
正確的做法 student (學號 姓名)
course(課程號 學分 )
選課表(學號 課程號 成績 )
第二正規化首先遵循 第一正規化 記錄要有唯一的標識 實體唯一性 不存在部分依賴。也就是說乙個資料庫表中,乙個表只能儲存一種資料,不能將同一種資料儲存在同一張表中
3nf 不存在傳遞依賴
哈哈,還是以例子來說明吧:
學號 姓名 年齡 學院 學院**
學號 ->學生姓名 ->所在學院 ->學院**
正確的做法 是
學生 (學號 姓名 年齡 所在學院)
學院 (學院名稱 學院**)
第三正規化就是任何字段不能由其他字段派生出來 也就是說 不存在傳遞依賴
再舉另外乙個例子說明:
比如在設計一張訂單資料表的時候,可以將商品的編號和訂單的編號建立相應的關係,而不是將商品的資訊和訂單的資訊放在同一張表中進行儲存。
當然可以進行反正規化的設計:為了提高查詢 更新效率 可以適當增加冗餘字段 以 空間 換時間
缺點: 查詢 表關聯
索引優化 難度 大
反正規化缺點
如果 表 讀的多 適當反正規化設計 以空間 換時間 如果更新的 多 那麼 遵循第三正規化從效能上講,正規化有更好的寫效能,飯正規化有更好的讀效能。
資料庫設計正規化
目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 滿足最低要求的正規化是第一正規化 1nf 在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化 2nf 其餘正規化以次類推。一般說來,資料庫只需滿...
資料庫設計正規化
前言 為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。正規化是什麼 正規化是符合某一種級別的關係模式的集合。...
資料庫正規化設計
在軟體開發過程中,資料庫的設計是非常重要的。可以說,良好的資料庫設計,是對使用者需求的理解的精準定位。它不僅能夠使得軟體開發起來非常便捷,而且還能夠使軟體系統高效執行,同時,為日後的維護或者更換資料庫提供便利。在最近開發系統的過程中,感覺收穫最大的也是關於資料庫的操作。最初開發機房收費系統的時候,由...