資料庫設計

2021-10-01 07:16:26 字數 2807 閱讀 6792

關係型資料庫設計:三大正規化的通俗理解

首先介紹下多表之間的關係
1. 多表之間的關係

1. 分類:

1. 一對一(了解):

* 如:人和身份證

* 分析:乙個人只有乙個身份證,乙個身份證只能對應乙個人

2. 一對多(多對一):

* 如:部門和員工

* 分析:乙個部門有多個員工,乙個員工只能對應乙個部門

3. 多對多:

* 如:學生和課程

* 分析:乙個學生可以選擇很多門課程,乙個課程也可以被很多學生選擇

2. 實現關係:

1. 一對多(多對一):

* 如:部門和員工

* 實現方式:在多的一方建立外來鍵,指向一的一方的主鍵。

2. 多對多:

* 如:學生和課程

* 實現方式:多對多關係實現需要借助第三張中間表。中間表至少包含兩個字段,這兩個字段作為第三張表的外來鍵,分別指向兩張表的主鍵

3. 一對一(了解):

* 如:人和身份證

* 實現方式:一對一關係實現,可以在任意一方新增唯一外來鍵指向另一方的主鍵。

一對一的關係

一對多的關係

多對多的關係

資料庫三大正規化

* 概念:設計資料庫時,需要遵循的一些規範。要遵循後邊的正規化要求,必須先遵循前邊的所有正規化要求

設計關聯式資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,這些不同的規範要求被稱為不同的正規化,各種正規化呈遞次規範,越高的正規化資料庫冗餘越小。

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

* 分類:

1. 第一正規化(1nf):每一列都是不可分割的原子資料項

2. 第二正規化(2nf):在1nf的基礎上,非碼屬性必須完全依賴於碼(在1nf基礎上消除非主屬性對主碼的部分函式依賴)

3. 第三正規化(3nf):在2nf基礎上,任何非主屬性不依賴於其它非主屬性(在2nf基礎上消除傳遞依賴)

* 幾個概念:

1. 函式依賴:a-->b,如果通過a屬性(屬性組)的值,可以確定唯一b屬性的值。則稱b依賴於a

例如:學號-->姓名。 (學號,課程名稱) --> 分數

2. 完全函式依賴:a-->b, 如果a是乙個屬性組,則b屬性值得確定需要依賴於a屬性組中所有的屬性值。

例如:(學號,課程名稱) --> 分數

3. 部分函式依賴:a-->b, 如果a是乙個屬性組,則b屬性值得確定只需要依賴於a屬性組中某一些值即可。

例如:(學號,課程名稱) -- > 姓名

4. 傳遞函式依賴:a-->b, b -- >c . 如果通過a屬性(屬性組)的值,可以確定唯一b屬性的值,在通過b屬性(屬性組)的值可以確定唯一c屬性的值,則稱 c 傳遞函式依賴於a

例如:學號-->系名,系名-->系主任

5. 碼:如果在一張表中,乙個屬性或屬性組,被其他所有屬性所完全依賴,則稱這個屬性(屬性組)為該錶的碼

例如:該表中碼為:(學號,課程名稱)

* 候選碼:關係中存在多個屬性或屬性組都能唯一標識該關係的元組(一行資料),這些屬性或屬性組就成為該關係的候選鍵或候選碼.

* 主碼:在乙個關係的若干候選碼中指定乙個用來標識該關係的元組,這個被指定的候選碼稱為主關鍵字,稱為主鍵或主碼. 每個關係都有且只有乙個主鍵,通常用較小的屬性組作為主鍵.

* 主屬性:包含在任何乙個候選碼中的屬性稱為主屬性

* 非主屬性:不包含在任何乙個候選碼中的屬性稱為非主屬性

舉例:

第一正規化(1nf):每一列都是不可分割的原子資料項, 明細這個表不符合第一正規化.
明顯不符合第一正規化,因為系可以分為系名和系主任.

拆分後存在的問題:

1.存在非常嚴重的資料冗餘(重複):姓名、系名、系主任

2.資料新增存在問題:新增新開設的系和系主任時,資料不合法

3.資料刪除存在問題:張無忌同學畢業了,刪除資料,會將系的資料一起刪除。

第二正規化(2nf):在1nf的基礎上,非碼屬性必須完全依賴於碼(在1nf基礎上消除非主屬性對主碼的部分函式依賴)

存在的問題:

2.資料新增存在問題:新增新開設的系和系主任時,資料不合法

3.資料刪除存在問題:張無忌同學畢業了,刪除資料,會將系的資料一起刪除。

第三正規化(3nf):在2nf基礎上,任何非主屬性不依賴於其它非主屬性(在2nf基礎上消除傳遞依賴)

問題解決!

資料庫設計 設計資料庫之前

1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...

資料庫設計 設計資料庫之前

1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...

資料庫設計 設計資料庫之前

1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...