mysql資料庫正規化

2021-10-06 08:58:45 字數 2012 閱讀 2038

減小資料的冗餘性

提高效率

屬性的原子性,每列不可再分解;

如:出生年月日—>年、月、日 便於後續修改

記錄的惟一性,說明乙個事物;

屬性必須完全依賴於主鍵,不能存在部分依賴

如:

說明了三個事物:學生資訊、系資訊、課程資訊

存在的部分依賴:姓名對學號存在部分依賴、系名對學號存在部分依賴、系主任對學號存在部分依賴

可能會存在問題:

資料冗餘

表中的第一行資料都儲存了系名、系主任,資料的冗餘太大

插入異常

如果有乙個新的系還沒有開始找到學生,那麼不能講該系的資訊新增到資料表中去,從資料表中看不到該系的存在

刪除異常

如果將某個系的學生資訊全部刪除,那麼這個繫在資料表裡也就不存在了,但這個系還存在。

更新異常

如果某個人要轉系,那麼為了保證資料庫中資料的一致性,需要修改三條記錄中系與系主任的資料

總體來說個人感覺不完全依賴主鍵的話,描述多個事物,更新刪除插入等等都會變得很繁瑣,分成多個表類似程式設計中的模組化,便捷很多

修改:

表一: 分數完全依賴於 學號和課程的屬性

表二: 姓名、系名、系主任完全依賴於學號的屬性

第二正規化消除了第一正規化的部分依賴

欄位的冗餘性

所有的非主屬性不依賴於其他的非主屬性,即不存在傳遞依賴;

如:主屬性:學號

非主屬性:姓名、系名、系主任

系名可以推出系主任,所以非主屬性系主任對主屬性學號存在傳遞函式依賴,將該資料表改進如下:

第三正規化消除了第二正規化的傳遞函式依賴

主屬性不能對候選碼存在部分函式依賴或者傳遞函式依賴

如:主屬性:倉庫名、管理員、物品名

非主屬性:數量

存在的問題:

先新新增乙個倉庫,但尚未存放任何物品,不可以為該倉庫指派管理員,因為物品名也是主屬性,根據實體完整性的要求,主屬性不能為空

某倉庫被清空後,該倉庫的資訊也被清空

當需要更新倉庫管理員,該倉庫存放了多少物品,就要修改多少條資訊。

在這個問題中就是存在了主屬性對於候選碼的部分依賴,也就是倉庫名對於管理員和物品名的部分依賴。

修改為:

倉庫(倉庫名,管理員)

庫存(倉庫名、物品數、數量)

一般說來,資料庫只需滿足第三正規化(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列中 第二層說的是在一張表中屬性值不能重複。在現代關係行資料庫中,都是預設滿足第一正規化的,所以你想...