資料庫設計正規化

2021-08-31 09:39:39 字數 1495 閱讀 3665

第一正規化(1nf)即滿足原子性:資料庫表中每一列都是不可分割的資料項,集合、陣列等屬於非原子項,此類屬性必須拆分為不同的屬性。

例子:學生****包括手機號和郵箱,

學號****

1138****8888

[email protected]

學生可能只有手機號或郵箱,如果學生既有手機號又有郵箱,這種情況應該使用「手機號」和「郵箱」兩個屬性而不能採用「****」乙個屬性來儲存。

學號手機郵箱1

138****8888

[email protected]

第二正規化(2nf)即在1nf基礎上,所有非主屬性完全依賴於主屬性

完全依賴:設一函式依賴x→y,若存在z,使得z→y成立。稱x→y為區域性依賴,否則稱x→y為完全依賴

例子:學生的班級與班主任,若學生表設計為

學號班級

班主任1

三年二班

***學號班主任班級班主任同時成立,如果班集更換班主任,需要修改該班級所有學生的記錄。設計違反第二正規化。正確的設計方式為

學號班級

1三年二班

班級

班主任三年二班

***第三正規化(3nf)即在2nf基礎上,任何非主屬性不依賴於其它非主屬性,要求乙個關係中不包含已在其它關係已包含的非主關鍵字資訊,即不存在依賴的傳遞。

設存在函式依賴x→y→z,稱z傳遞依賴與x

例子:課程資訊

課程教師

教師職稱

高數***

教授如果教師並沒有代課,那麼教師的職稱無法儲存,即存在課程教師職稱,對於教師的職稱屬性構成傳遞依賴。設計違反第三正規化,正確的設計方式為

課程教師

高數*** 教師

教師職稱

***教授

巴斯-科德正規化(bcnf)即在3nf基礎上,主屬性不依賴於主屬性,若滿足第三正規化且只有乙個候選碼,即達成bc正規化。

例子:學生的選課資訊,設計為關聯表:

學生表:

學號姓名1小明

教師表:

教師工號

教師姓名

1***

課程表課程編號

課程名稱1高數

選課表選課記錄id

學號教師工號

課程編號11

11「小明」,「***」和「高數」分別是「學生」,「教師」和「課程」的主屬性,如果沒有學生選***的高數課,那麼***代有沒有代高數?合理的設計為:

增加教師代課表

代課記錄id

課程編號

教師工號11

1修改選課表

選課記錄id

學號代課記錄id11

1

資料庫設計正規化

目前關聯式資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 第四正規化 4nf 第五正規化 5nf 和第六正規化 6nf 滿足最低要求的正規化是第一正規化 1nf 在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化 2nf 其餘正規化以次類推。一般說來,資料庫只需滿...

資料庫設計正規化

前言 為什麼要寫這篇文章呢,從去年年底開始,就和很多做技術的朋友交流過,從資料庫設計到資料庫架構各個方面的內容。有一些朋友執著於orm,執著於所謂的資料庫設計,卻忘記了一切技術是要為業務服務這個基石。當然這文章裡也有一些自己的理解,想向大家表達。正規化是什麼 正規化是符合某一種級別的關係模式的集合。...

資料庫正規化設計

在軟體開發過程中,資料庫的設計是非常重要的。可以說,良好的資料庫設計,是對使用者需求的理解的精準定位。它不僅能夠使得軟體開發起來非常便捷,而且還能夠使軟體系統高效執行,同時,為日後的維護或者更換資料庫提供便利。在最近開發系統的過程中,感覺收穫最大的也是關於資料庫的操作。最初開發機房收費系統的時候,由...