資料庫設計

2022-05-21 08:00:54 字數 1963 閱讀 3193

nf為normal form的縮寫

碼就是關鍵字,可以為組合

1nf:乙個table中的列是不可再分的(即列的原子性)

2nf:乙個table中的行是可以唯一標示的,(即table中的行是不可以

重複的)

3nf:乙個table中的列不依賴於另乙個table中的非主鍵列

4nf:禁止主鍵列和非主鍵列一對多關係不受約束

5nf:將表分割成盡可能小的塊,為了排除在表中所有的冗餘

目前關聯式資料庫有六種正規化:第一正規化(1nf)、第二正規化(2nf)、第三正規化(3nf)、第四正規化(4nf)、第五正規化(5nf)和第六正規化(6nf)。滿足最低要求的正規化是第一正規化(1nf)。在第一正規化的基礎上進一步滿足更多要求的稱為第二正規化(2nf),其餘正規化以次類推。一般說來,資料庫只需滿足第三正規化(3nf)就行了。下面我們舉例介紹第一正規化(1nf)、第二正規化(2nf)和第三正規化(3nf)。

我試圖這樣解釋前三正規化:

第一正規化(1nf): 對於表中的每一行,必須且僅僅有唯一的行值;在一行中的每一列僅有唯一的值並且具有原子性。

這個概念的第一句話很好理解,任何人也不會在一張表中存在兩個一模一樣的記錄。關鍵是第二句話:在一行中的每一列僅有唯一的值並且具有原子性,看如下示例:

比如有一張學生的基本資料表,如下圖所示:

這個表不符合1nf,因為「**」欄位中的值有多個,可以分割成多個值,不具有原子性,這樣帶來的問題維護、查詢、統計該字段的值很麻煩。

我們通過把重複的字段的值放到獨立的表中,把這些表通過一對多關係關聯起來消除重複值。可以把上面的表改造成以下兩張表,以符合第一正規化:

第二正規化(2nf):要求非主鍵列是主鍵的子集,非主鍵列活動必須完全依賴整個主鍵。

比如有學生選課表,如果設計成如下情況就違反第二正規化:

主鍵為(課程名,學生姓名)

"(學年,學分,課程所用教材,出版社,學生班級,學生性別),

但是(課程名)

"(學分,課程所用教材,出版社),即(學分,課程所用教材,出版社)依賴於(課程名);

同樣,(學生姓名)

"(學生班級,學生性別),即(學生班級,學生性別)依賴於(學生姓名)。

我們把上面的表拆分成三張表,以符合第二正規化:

以後用檢視等方式關聯解析表內容。

第三正規化(3nf): 要求非主鍵列互不依賴,或者說非主鍵不能依賴傳遞。

例如建立的學生基本資訊表就不符合3nf:

因為(學生姓名)

"(學生班級),(學生班級)

"(所屬系部,班主任,所屬專業,教室),但同時(學生姓名)

"(所屬系部,班主任,所屬專業,教室),就有了傳遞關係。

遇到不符合3nf情況,我們建立「字典表」來使之符合3nf,如把上表拆分成如下兩張表,即可符合3nf:

為了更加的理解,我再說說

第一正規化(1nf):在關係模式r中的每乙個具體關係r中,如果每個屬性值 都是不可再分的最小資料單位,則稱r是第一正規化的關係。

第二正規化(2nf):如果關係模式r(u,f)中的所有非主屬性都不完全依賴於任意乙個候選關鍵字,則稱關係r 是屬於第二正規化的。

第三正規化(3nf):如果關係模式r(u,f)中的所有非主屬性對任何候選關鍵字都不存在傳遞信賴,則稱關係r是屬於第三正規化的。

bcnf:如果關係模式r(u,f)的所有屬性(包括主屬性和非主屬性)都不傳遞依賴於r的任何候選關鍵字,那麼稱關係r是屬於bcnf的。或是關係模式r,如果每個決定因素都包含關鍵字(而不是被關鍵字所包含),則rcnf的關係模式。

1nf直到bcnf的四種正規化之間有如下關係: bcnf包含了3nf包含2nf包含1nf

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

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

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

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

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

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