資料庫三正規化

2021-07-27 02:53:20 字數 2103 閱讀 8199

設計關係型資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫。這些規範被稱作正規化。越高的正規化資料庫的冗餘度就越低。

目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、巴德斯科正規化(bcnf)、第四正規化(4nf)和第五正規化(5nf,又稱完美正規化)

滿足第二正規化一定滿足第一正規化,滿足第三正規化一定滿足第二正規化,依次類推。。。

關係型資料庫的最低要求是滿足第一正規化。一般來講,資料庫滿足到第三正規化就行了。

資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。如果實體中的某個屬性有多個值時,必須拆分為不同的屬性

在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的設計基本要求,一般設計中都必須滿足第一正規化(1nf)。不過有些關係模型中突破了1nf的限制,這種稱為非1nf的關係模型。換句話說,是否必須滿足1nf的最低要求,主要依賴於所使用的關係模型。

第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。

當存在多個主鍵的時候,才會發生不符合第二正規化的情況。比如現在有兩個主鍵,不能存在這樣的屬性,它只依賴於其中乙個主鍵,這就是不符合第二正規化。

如果存在不符合第二正規化的情況,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。

第三正規化(3nf)是在第二正規化(2nf)的基礎上建立起來的,即滿足第三正規化(3nf)必須先滿足第二正規化(2nf)。

如果某一屬性依賴於其他非主鍵屬性,而其他非主鍵屬性又依賴於主鍵,那麼這個屬性就是間接依賴於主鍵,這被稱作傳遞依賴於主屬性。

下面以乙個學校的學生系統為例分析說明這幾個正規化的應用。首先我們確定一下要設計的內容包括那些。學號、姓名、年齡、性別、**、系別、系辦位址、系辦**、課程、學分、成績,等資訊。

在當前的任何關聯式資料庫管理系統(dbms)中,傻瓜也不可能做出不符合第一正規化的資料庫,因為這些dbms不允許你把資料庫表的一列再分成二列或多列。因此,你想在現有的dbms中設計出不符合第一正規化的資料庫都是不可能的。

雖然第一正規化一定是滿足的,但是為了加強理解,還是舉例說明一下

如果在某個學生的「**」屬性中填入了「1585858588 025-58318888」,那麼就違反了第一正規化。學生**屬性違反了原子性,它還可以再分,分成手機和座機兩個屬性。

我們把(學號、姓名、年齡、性別、**、系別、系辦位址、系辦**、課程、學分、成績)這些資訊放到乙個表中,其中「學生學號」和「課程」兩個屬性是主鍵。

這樣不符合第二正規化。出現了屬性依賴於部分主鍵的情況(比如」姓名「只依賴於」學號「,和「課程」屬性無關)

那麼違反了第二正規化有什麼問題呢?下面來分析一下:

資料冗餘:

同一門課程由n個學生選修,"學分"就重複n-1次;同乙個學生選修了m門課程,「姓名」和「年齡」就重複了m-1次。
更新異常:
1)若調整了某門課程的學分,資料表中所有行的"學分"值都要更新,否則會出現同一門課程學分不同的情況。

2)假設要開設一門新的課程,暫時還沒有人選修。這樣,由於還沒有"學號"關鍵字,課程名稱和學分也無法記錄入資料庫。

刪除異常 :
假設一批學生已經完成課程的選修,這些選修記錄就應該從資料庫表中刪除。但是,與此同時,課程名稱和學分資訊也被刪除了。很顯然,這也會導致插入異常。
解決方案 :

分成三個表:

課程:course(課程,學分)

選課關係:selectcourse(學號,課程,成績)

3 第三正規化舉例

繼續看上面改善過了的關係結構。由於student表只有乙個主鍵「學號」,所以存在如下決定關係:

(學號)→ (姓名,年齡,性別,**,系別,系辦位址、系辦**)
但是還存在下面的決定關係:

(學號) → (系別)→(系辦地點,系辦**)
即存在非關鍵字段」系辦地點」、」系辦**」對關鍵字段」學號」的傳遞依賴。它也會存在資料冗餘、更新異常、插入異常和刪除異常的情況(這裡不作分析,可以參照第二正規化的分析)

解決方案:

繼續把學生表分成兩個表:

學生:(學號,姓名,年齡,性別,**,系別)

資料庫正規化 三正規化

所謂第一正規化 1nf 是指在關係模型中,對域新增的乙個規範要求,所有的域都應該是原子性的,即資料庫表的每一列都是不可分割的原子資料項,而不能是集合,陣列,記錄等非原子資料項。即實體中的某個屬性有多個值時,必須拆分為不同的屬性。在符合第一正規化 1nf 表中的每個域值只能是實體的乙個屬性或乙個屬性的...

資料庫三正規化

資料庫的三正規化 1n 關係r中的屬性都是不可分割的項.2n 在1n的基礎上,每個非主屬性完全函式依賴於碼.3n 在2n的基礎上,每乙個非主屬性既不部分依賴於碼也不傳遞依賴於碼.1n 消除非主屬性對碼的部分函式依賴 2n 消除非主屬性對碼的傳遞函式依賴 3n 消除主屬性對碼的部分和傳遞函式依賴 bc...

資料庫三正規化

1 第一正規化 1nf 無重複的列 所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化 ...