二 資料庫三正規化簡介

2021-09-26 03:22:24 字數 1383 閱讀 8412

列不可分(列的原子性):每一列的資料都是乙個原子項,不能**成幾列。

例子:如下表中的****字段,有的儲存的是手機號碼,有的儲存的是電子郵箱,有的既儲存了手機號碼,又儲存了郵箱,這是不規範的,破壞了列的原子性。

學生id

姓名****1張三

138123456782李四

18745678910,[email protected]王五

[email protected]

正確做法是將其改為兩列,使手機號碼和電子郵箱各自為一列,如下。

學生id

姓名手機號碼

電子郵箱1張三

13812345678

null2李四

18745678910

[email protected]王五

null

[email protected]

行有主鍵,且如果主鍵是由多個列組合而成的,則非主鍵的列必須依賴於主鍵這個組合整體,不能是只依賴主鍵中的某一列。

也就是說,在有的表中,主鍵是聯合主鍵的情況下,所有非主鍵的列必須依賴整個聯合主鍵,不能只依賴於聯合主鍵中的某乙個部分。

例子:下表中,課程和學生是多對多關係,因此,由課程id和學生id組成聯合主鍵來唯一的確定一列。

此外,學生的成績與此聯合主鍵一一對應,不是單獨依賴於學生id和課程id,因此是完全依賴於主鍵。然而,姓名與課程名稱只是部分依賴主鍵,即姓名只依賴與學生id,而課程主鍵只依賴於課程id。因此,違反了第二正規化。

課程id

學生id

姓名課程名稱成績1

1張三資料結構882

1張三演算法分析921

2李四資料結構732

2李四演算法分析891

3王五資料結構642

3王五演算法分析

83這樣做的弊端在於,假設需要向資料庫中新增加一門課程(或者學生),就必須要有學生選了該課程才能成功儲存,因為此時才具有了主鍵。

正確的設計應該是將其拆分為三張表,如下所示。

課程id

學生id成績1

18821

921273

22891

36423

83學生id姓名1

張三2李四3

王五課程id

課程名稱

1資料結構

2演算法分析

直接依賴,即所有非主鍵的列必須直接依賴於主鍵,而不能存在間接依賴。

例子:表中使用者id依賴於訂單號,而姓名依賴於使用者id而非直接依賴於訂單號,這樣就出現了冗餘資料。

訂單號使用者id姓名1

1張三21

張三32李四

42李四5

3王五正確的做法同樣是將其拆分為兩張表,如下:

訂單號使用者id11

2132

4253

使用者id姓名1

張三2李四3

王五

資料庫正規化 三正規化

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

資料庫正規化 一正規化 二正規化 三正規化 BC正規化

一正規化 關係模式r所有的屬性都是不可分割的,不能為組合屬性 多值屬性。一正規化是資料庫設計裡的必要條件。二正規化 非主碼的屬性集依賴於主碼屬性集,不依賴於主碼屬性集的子集 bcnf boyce bodd normal form bc正規化 在二正規化的基礎上,消除更多的冗餘。第三正規化 在bc正規...

資料庫三正規化

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