三正規化,資料庫設計的基本準則

2022-02-03 07:01:50 字數 2065 閱讀 3316

注:

第一正規化:1nf

1、確保建立表時的每一列屬性的原子性,即每一列屬性都是不可再分的屬性值。

(1)例如:

(1)解釋:

user_address 屬性不符合屬性的原子性,該屬性可以進一步進行拆分成,省、市、縣、詳細位址等資訊!

(2)例如:

(2)解釋:

將原user_address屬性拆分成省份、地市資訊(int型別資料字典值),根據具體需求可以將詳細位址進一步進行拆分,定位到城區,縣市,甚至是小區名稱,建築物名稱等!

所以所謂屬性的原子性也要結合具體需求實現相應粒度的原子性!例如:要對使用者的省市資訊進行分組表1顯然不滿足需求、要對區縣資訊進行分組表2仍不滿足需求,應進一步將user_address進行原子性拆分。

2、同乙個資料表中不得存在型別相似的屬性

(1)例如:

(1)解釋:

user_provence_2 等屬性與user_provence等屬性重複,當前表既無法滿足使用者有多個收貨位址的情況,當只存在乙個收貨位址的情況下,又會造成字段冗餘!

建立收貨位址表,解決屬性相似問題,及多個收貨位址的情況!

第二正規化:2nf

1、一張表在滿足1nf的前提下,表中其他非主屬性又統一直接依賴表中唯一主屬性(primary key)則滿足2nf!

2nf是對記錄的惟一性約束,要求記錄有惟一標識,即實體的惟一性,更通俗說有主鍵id。

(1)例如:

(1)解釋:

在使用者表中存在非主屬性[order_info]不與該錶主屬性[user_id]直接關聯(order_info與order_id直接關聯),即當前表不滿足2nf。

應將訂單表與使用者表分離,訂單表通過關聯使用者表user_id實現主從模式[1使用者—n訂單] 繫結。保證了乙個表只儲存一類業務實體。

第三正規化:3nf

1、資料表中不存在屬性的依賴傳遞

(1)示例:

(1)解釋:3nf是對字段冗餘性的約束,即任何字段不能由其他字段派生出來,它要求字段沒有冗餘。

乍一看,code能決定其他非主屬性,符合2nf。但是在同系的學生中,系相關資訊被儲存n份。

(1)造成了資料冗餘,同系學生的系相關資訊相同。

(2)修改系相關資訊,則需要修改所有學生的系資訊。

解決辦法:分表操作!

解決表中的依賴傳遞現象,code—>d_code  ,d_code 能決定d_name/d_address ,則code影響d_name/d_address是通過code—>d_code 進行的依賴傳遞實現的。

基於三正規化的資料庫設計屬於學院派的資料表設計風格,並不是所以的表設計都要滿足三正規化!在真正的生產環境下,主要依據業務需求結合資料規模等各種因素的綜合影響下對錶結構進行設計!切不可拘泥於正規化的約束!

資料庫設計20條基本準則

下面給出了20個資料庫設計基本準則,當然,所謂最佳,還是要看它是否適合你的程式。一起來了解了解吧。使用明確 統一的標明和列名,例如 school,schoolcourse,courceid。資料表名使用單數而不是複數,例如 studentcourse,而不是studentcourses。資料表名不要...

正規化 設計關係型資料庫的準則

第一正規化 1nf 字段 列 都是單一屬性,不可再分。第二正規化 2nf 在1nf基礎上,要求在資料庫表中不存在非關鍵字段對任一候選關鍵字段的部分函式依賴。就是消除部分依賴性,意思是在2nf中組合主鍵 ab 中的a,b不能和其他字段存在組合重複,解決方法就是 1 復合鍵拆分為兩個表。2 不用組合主鍵...

資料庫正規化 三正規化設計

資料庫第一正規化 原子性 表中每一列都不可以再分割成更小的列 資料庫第二正規化 不產生區域性依賴 每張表只描述一件事情 資料庫第三正規化 表中每列都直接依賴於主鍵,而不是通過其它列間接依賴於主鍵 什麼是資料庫正規化 學習第一正規化的應用 什麼是正規化 一種規則,指導程式設計師建立表的規則 程式設計師...