減小資料的冗餘性
提高效率
屬性的原子性,每列不可再分解;
如:出生年月日—>年、月、日 便於後續修改
記錄的惟一性,說明乙個事物;
屬性必須完全依賴於主鍵,不能存在部分依賴
如:
說明了三個事物:學生資訊、系資訊、課程資訊
存在的部分依賴:姓名對學號存在部分依賴、系名對學號存在部分依賴、系主任對學號存在部分依賴
可能會存在問題:
資料冗餘:
表中的第一行資料都儲存了系名、系主任,資料的冗餘太大
插入異常:
如果有乙個新的系還沒有開始找到學生,那麼不能講該系的資訊新增到資料表中去,從資料表中看不到該系的存在
刪除異常:
如果將某個系的學生資訊全部刪除,那麼這個繫在資料表裡也就不存在了,但這個系還存在。
更新異常:
如果某個人要轉系,那麼為了保證資料庫中資料的一致性,需要修改三條記錄中系與系主任的資料
總體來說個人感覺不完全依賴主鍵的話,描述多個事物,更新刪除插入等等都會變得很繁瑣,分成多個表類似程式設計中的模組化,便捷很多
修改:
表一: 分數完全依賴於 學號和課程的屬性
表二: 姓名、系名、系主任完全依賴於學號的屬性
第二正規化消除了第一正規化的部分依賴
欄位的冗餘性
所有的非主屬性不依賴於其他的非主屬性,即不存在傳遞依賴;
如:主屬性:學號
非主屬性:姓名、系名、系主任
系名可以推出系主任,所以非主屬性系主任對主屬性學號存在傳遞函式依賴,將該資料表改進如下:
第三正規化消除了第二正規化的傳遞函式依賴
主屬性不能對候選碼存在部分函式依賴或者傳遞函式依賴
如:主屬性:倉庫名、管理員、物品名
非主屬性:數量
存在的問題:
先新新增乙個倉庫,但尚未存放任何物品,不可以為該倉庫指派管理員,因為物品名也是主屬性,根據實體完整性的要求,主屬性不能為空
某倉庫被清空後,該倉庫的資訊也被清空
當需要更新倉庫管理員,該倉庫存放了多少物品,就要修改多少條資訊。
在這個問題中就是存在了主屬性對於候選碼的部分依賴,也就是倉庫名對於管理員和物品名的部分依賴。
修改為:
倉庫(倉庫名,管理員)
庫存(倉庫名、物品數、數量)
一般說來,資料庫只需滿足第三正規化(3nf)就行了。
但是,沒有冗餘的資料庫未必是最好的資料庫,有時為了提高執行效率,就必須降低正規化標準,適當保留冗餘資料。
具體做法:概念資料模型設計時遵守第三正規化,物理資料模型設計時考慮降低正規化標準。降低正規化就是增加字段,允許冗餘,達到以空間換時間的目的。
如:〖例〗:有一張存放商品的基本表,「金額」這個欄位的存在,表明該錶的設計不滿足第三正規化,因為「金額」可以由「單價」乘以「數量」得到,說明「金額」是冗餘字段。但是,增加「金額」這個冗餘字段,可以提高查詢統計的速度,這就是以空間換時間的作法。
可以儘量減少資料冗餘,資料表更新快體積小
正規化化更新操作快,正規化化的表更小
查詢需要多個表進行**關聯,導致效能降低
更難進行索引優化
減少表的關聯,更好的進行索引優化
存在資料冗餘、資料異常,對資料的修改需要更多的成本
參考:資料庫邏輯設計之三大正規化通俗理解,一看就懂,書上說的太晦澀
mysql三大正規化
MySQL 資料庫正規化
目錄 1 資料庫正規化簡介 2 應用正規化優點 3 常見正規化簡述 1 第一正規化 1nf 2 第二正規化 2nf 3 第三正規化 3nf 4 bc正規化 bcnf 5 第四正規化 4nf 4 存在的問題 5 各正規化關係圖 設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同...
mysql三正規化 MySQL資料庫三正規化
設計關係型資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關係型資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf 第四正規化 4nf 和第五正...
mysql資料庫的正規化 理解資料庫正規化
第一正規化 1nf 第一正規化的核心描述為 資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值。該正規化講的是列的原子性。有兩層意思 一層是說每一列只能存乙個屬性值 如果把2個屬性值存在1列中 第二層說的是在一張表中屬性值不能重複。在現代關係行資料庫中,都是預設滿足第一正規化的,所以你想...