關聯式資料庫的第一第二第三正規化

2021-08-03 21:31:25 字數 2256 閱讀 9604

《資料庫原理》 中涉及到關聯式資料庫的第一第二第三正規化的解釋,以下做些簡單的理解

在解釋之前,做乙個簡單的介紹,為什麼要理解正規化,是因為要設計資料庫,而設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小.

正規化的概念(nf)

教材中的定義:

符合某一種級別的關係模式的集合,表示乙個關係內部各屬性之間的聯絡的合理化程度

簡單理解:

在介紹正規化的使用方式之前,先簡單了解下資料庫的構成部分;

實體:現實世界中客觀存在並可以被區別的事物。比如「乙個學生」、「一本書」、「一門課」等等。值得強調的是這裡所說的「事物」不僅僅是看得見摸得著的「東西」,它也可以是虛擬的,不如說「老師與學校的關係」。

屬性:教科書上解釋為:「實體所具有的某一特性」,由此可見,屬性一開始是個邏輯概念,比如說,「性別」是「人」的乙個屬性。在關聯式資料庫中,屬性又是個物理概念,屬性可以看作是「表的一列」。

元組:表中的一行就是乙個元組。

分量:元組的某個屬性值。在乙個關聯式資料庫中,它是乙個操作原子,即關聯式資料庫在做任何操作的時候,屬性是「不可分的」。否則就不是關聯式資料庫了。

全碼:如果乙個碼包含了所有的屬性,這個碼就是全碼。

主屬性:乙個屬性只要在任何乙個候選碼中出現過,這個屬性就是主屬性。

非主屬性:與上面相反,沒有在任何候選碼中出現過,這個屬性就是非主屬性。

外碼:乙個屬性(或屬性組),它不是碼,但是它別的表的碼,它就是外碼。

候選碼: 若關係中的某一屬性或屬性組的值能唯一的標識乙個元組,而其任何真子集都不能再標識,則稱該屬性組為(超級碼)候選碼。

下面介紹三種nf:

第一正規化(1nf)

下面這張表就不屬於第一正規化,那如果要修改為符合第一正規化,該如何修改呢?

下面是修改後的圖示,符合第一正規化,如果不按照正規化的要求去設計表,會出現什麼情況,就是你的crdu操作都會失敗,資料新增不到資料庫表中,不管是mysql,oracle,還是sqlserver;

仔細觀察上面這張表,的確符合1nf,但是乙個很明顯的問題,冗餘資料過多,可能插入,刪除,修改會出現異常,接下來我們需要2nf來解決這個問題.

2nf:

對於選課表,其碼是(學號,課名),主屬性是學號課名,非主屬性是分數學號確定,並不能唯一確定分數課名確定,也不能唯一確定分數,所以不存在非主屬性分數對於碼(學號,課名)的部分函式依賴,所以此表符合2nf的要求。

對於學生表,其碼是學號,主屬性是學號,非主屬性是姓名、系名系主任,因為碼只有乙個屬性,所以不可能存在非主屬性對於碼 的部分函式依賴,所以此表符合2nf的要求。

3nf:

對於選課表,主碼為(學號,課名),主屬性為學號課名,非主屬性只有乙個,為分數,不可能存在傳遞函式依賴,所以選課表的設計,符合3nf的要求。

對於學生表,主碼為學號,主屬性為學號,非主屬性為姓名系名系主任。因為 學號 → 系名,同時 系名 → 系主任,所以存在非主屬性系主任對於碼學號的傳遞函式依賴,所以學生表的設計,不符合3nf的要求。

對資料表進行拆分:

如何解釋關聯式資料庫的第一第二第三正規化?

1nf的定義為 符合1nf的關係中的每個屬性都不可再分 2nf在1nf的基礎之上,消除了非主屬性對於碼的部分函式依賴 第三正規化 3nf 3nf在2nf的基礎之上,消除了非主屬性對於碼的傳遞函式依賴。bcnf正規化 在 3nf 的基礎上消除主屬性對於碼的部分與傳遞函式依賴 函式依賴 若在一張表中,在...

資料庫(第一正規化,第二正規化,第三正規化)

正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...

資料庫(第一正規化,第二正規化,第三正規化)

正規化 英文名稱是 normal form,它是英國人 e.f.codd 關聯式資料庫的老祖宗 在上個世紀70年代提出關聯式資料庫模型後總結出來的,正規化是關聯式資料庫理論的基礎,也是我們在設計資料庫結構過程中所要遵循的規則和指導方法。目前有跡可尋的共有8種正規化,依次是 1nf,2nf,3nf,b...