Mysql 一 資料庫設計三正規化

2022-04-09 20:34:07 字數 1384 閱讀 5034

在設計和資料庫有關的系統時,資料庫表的設計至關重要,這些設計關係整個系統的架構,需要精心的仔細考慮。

·資料庫的設計主要包含了設計表結構和表之間的聯絡,在設計的過程中,有一些規則應該遵守,也就是我們常說的資料庫三正規化。

第一正規化是最基本的正規化,如果資料庫表中所有的字段都是不可分解的,就說明該資料庫滿足了第一正規化。

第一正規化的合理遵循需要根據系統的實際需求來定。比如某些資料庫系統中需要用到"位址"這個屬性,本來直接將「位址"屬性設計成乙個資料庫表的字段就行。

但是如果系統經常會訪問「位址"屬性中的「城市「部分,那麼就非要將「位址「這個屬性重新拆分為省份、城市、詳細位址等多個部分進行儲存,這樣在對位址中某

一部分操作的時候將非常方便。這樣設計才算滿足了資料庫的第一正規化,如下表所示,如果把省份,城市放到詳細位址中,也可以說滿足第一正規化,但是如果我們

要省份或者城市做統計,這樣顯然就不合適。

第二正規化在第一正規化的基礎上更近一層。第二正規化需要確保資料庫表中的每一列都和主鍵相關,而不是只與主鍵的某一部分相關(主要是針對聯合主鍵而言)。

也就是說在乙個資料庫表中,乙個表中只能儲存一種資料,不可以把多種資料儲存在同乙個表中。並且二正規化要求資料庫表中每個例項或者行必須可以被唯一區分。

這樣描述感覺比較抽象,下來舉個例子,你就明白了。

如上圖所示,我們在一張表存了學生以及這個學生的老師的資訊。表面上看沒什麼問題,但是實際上這樣會出現很多的冗餘資料,比如張三這個學生,我們就存了兩次,張老師我們存了三次。

並且很明顯的這個表存了兩種資料,學生資訊和老師資訊,所以我們需要對該錶進行如下分解:

滿足第三正規化必須滿足第二正規化。簡而言之,第三正規化要求資料庫表中不包含已在其他表中已包含的非主鍵列。不能出現傳遞依賴,即:除主鍵外,其他字段必須必須依賴主鍵。

比如在設計乙個訂單資料表的時候,可以將客戶編號作為乙個外來鍵和訂單表建立相應的關係。而不可以在訂單表中新增關於客戶其它資訊(比如姓名、所屬公司等)的字段。如下面這

兩個表所示的設計就是乙個滿足第三正規化的資料庫表。

總結:在關係型資料庫中,特別是業務性比較強的場景下,必須要嚴格遵守資料庫設計的三正規化。當然,在某些特定的場景下,比如某個字段明確知道不會改變,

也可以作為冗餘欄位加到其他表,以此來提高查詢效率。

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

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

mysql三正規化 MySQL資料庫三正規化

設計關係型資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。目前關係型資料庫有六種正規化 第一正規化 1nf 第二正規化 2nf 第三正規化 3nf 巴斯 科德正規化 bcnf 第四正規化 4nf 和第五正...

MySQL 資料庫的設計三正規化

定義 每乙個欄位是原子性不能再分。舉例 下圖就不符合第一正規化,因為contact列中不是原子性可以再分為phone和qq 經過修改後下圖就滿足第一正規化。定義 第二正規化事建立在第一正規化的基礎之上,要求資料庫中所有非主鍵字段完全依賴主鍵,不能產生部份依賴。也就是說不要使用聯合主鍵 舉例 如下圖的...