數據庫設計範式之邏輯設計

邏輯設計

1. 相關名詞

1.1. 候選碼,主碼

候選碼通常有一個或多個,用於唯一確定一個元組(行,對象)。舉例:主鍵,唯一索引都可以是候選碼。

主碼從候選碼中選擇,通常是表的主鍵。

1.2. 屬性,屬性名稱,域,分量

屬性就是列,對象屬性值。

屬性名就是列名,字段名,對象屬性名。

域就是屬性值範圍。

分量就是屬性值範圍中的某個屬性值。

舉例:用戶表的性別是一個屬性,gender 是屬性名,female 是屬性值,male 和 female 就是域,male 或 female 就是分量。

1.3. 關係,元組

關係就是對象的集合。(表)

元組就是對象。(表中的某一行)

2. E-R 圖

包括四個相關概念:矩形,菱形,橢圓,線段。

2.1. 相關概念

矩形

矩形就是一個實體(OOP 中的類,數據庫的表)

菱形

菱形就是關係,兩個實體之間的關係。例如購物車實體和商品實體之間的關係就是選購,原來購物車實體和商品實體之間是多對多關係,通過選購關聯之後,購物車實體和商品實體之間轉化爲一對多關係,即一個購物車可以選購多個商品,但一個商品只能被一個購物車選購。

橢圓

橢圓就是屬性(數據庫表的字段)。作爲主碼的屬性底部通常添加了直線。

線段

線段建立關係,矩形和橢圓之間,矩形之間。

2.2. 舉例:電商 E-R 圖

電商 ER 圖. jpg

3. 數據庫設計範式

數據庫設計範式就是:

  1. 數據庫設計的最佳實踐。

  2. 避免數據操作異常和數據冗餘異常。數據操作異常包括插入異常,刪除異常和更新異常,而數據冗餘會破壞數據一致性。

數據操作異常

數據庫設計範式包括:第一範式,第二範式,第三範式和 BC 範式,當然還有第四範式和第五範式。

4. 第一範式

數據庫表中所有屬性都是單一字段,不可再分。

白話:二維表(行,列)一定滿足 1NF。

5. 第二範式

數據庫表中存在非關鍵字段部分依賴組合候選關鍵字段,或者說組合關鍵候選字段中的某一關鍵字段決定非關鍵字段,這樣就違反了第二範式。

說明:1)關鍵字段就是唯一確定一個元組的字段,也就是候選碼。2)部分函數依賴

白話:單關鍵字段的表,一定滿足 2NF

舉例:商品同供應商表

存在下列字段:商品名稱,價格,描述,重量,供應商名稱,供應商電話號碼,分類,有效期。

因爲商品實體和供應商實體之間是多對多關係,所以通過商品名稱和供應商名稱唯一標識一件商品,那麼商品名稱和供應商名稱就是組合關鍵候選字段,上面表中商品名稱決定價格,描述,重量,而供應商名稱決定供應商電話號碼,違反了 2NF。

存在問題:數據操作異常和數據冗餘異常。

如何解決?將原商品表劃分爲商品表,供應商表和商品供應商中間表。這樣商品表和供應商表都變成了但關鍵字段的表,那麼就一定滿足 2NF。

6. 第三範式

建立在 2NF 基礎之上。

不存在非關鍵詞對任意候選關鍵字段的傳遞函數依賴關係,則符合 3NF。

傳遞函數依賴:A 屬性 -> B 屬性 -> C 屬性,即 C 對 A 存在傳遞函數依賴。

舉例:商品同分類表

存在字段:商品名稱(關鍵字段),分類,分類描述

商品名稱決定分類,而分類有決定分類描述,即滿足非關鍵字段對關鍵字段的傳遞函數依賴,違反了第三範式。

存在問題:

如何解決?拆分爲商品表,分類表和商品分類中間表。

7. BC 範式

建立在 3NF 基礎之上。

複合關鍵詞之間不存在傳遞函數依賴關係。

出處:https://www.jianshu.com/p/8d2eb273d0a3

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/8TFYhCVrUFjDFdqlyXx8Gw