一文說懂資料庫三正規化

2021-10-20 21:14:33 字數 2419 閱讀 4931

最近在備考中級軟體設計師,遇到資料庫設計方面問題,

首先解釋下三個名詞

碼、主屬性、非主屬性

(候選碼):關係中的某個屬性或者某幾個屬性的組合,用於區分每個元組。假如當 k 確定的情況下,該錶除 k 之外的所有屬性的值也就隨之確定,那麼 k 就是碼

主屬性:包含在任何乙個碼中的屬性成為主屬性。

非主屬性:處主屬性外的屬性

三種依賴 完全依賴、部分依賴、傳遞函式依賴

完全依賴:在一張表中,若 x → y,且對於 x 的任何乙個真子集(假如屬性組 x 包含超過乙個屬性的話),x 』 → y 不成立,那麼我們稱 y 對於 x 完全函式依賴,記作 x f→ y。(那個f應該寫在箭頭的正上方)

部分函式依賴

假如 y 函式依賴於 x,但同時 y 並不完全函式依賴於 x,那麼我們就稱 y 部分函式依賴於 x,記作 x p→ y,

傳遞函式依賴

假如 z 函式依賴於 y,且 y 函式依賴於 x 指出的錯誤,這裡改為:『y 不包含於 x,且 x 不函式依賴於 y』這個前提),那麼我們就稱 z 傳遞函式依賴於 x ,記作 x t→ z,如圖

第一正規化::符合1nf的關係中的每個屬性都不可再分

表1所示的情況,就不符合1nf的要求。

規範表示為

第二正規化:2nf在1nf的基礎之上,消除了非主屬性對於碼的部分函式依賴。接下來對這句話中涉及到的四個概念——「函式依賴」、「碼」、「非主屬性」、與「部分函式依賴」進行一下解釋。

第一步:找出資料表中所有的碼。

第二步:根據第一步所得到的碼,找出所有的主屬性。

第三步:資料表中,除去所有的主屬性,剩下的就都是非主屬性了。

第四步:檢視是否存在非主屬性對碼的部分函式依賴。對於表3,

根據前面所說的四步,我們可以這麼做:

第一步:檢視所有每一單個屬性,當它的值確定了,是否剩下的所有屬性值都能確定。檢視所有包含有兩個屬性的屬性組,當它的值確定了,是否剩下的所有屬性值都能確定。……檢視所有包含了六個屬性,也就是所有屬性的屬性組,當它的值確定了,是否剩下的所有屬性值都能確定。

看起來很麻煩是吧,但是這裡有乙個訣竅,就是假如a是碼,那麼所有包含了a的屬性組,如(a,b)、(a,c)、(a,b,c)等等,都不是碼了(因為作為碼的要求裡有乙個「完全函式依賴」)。

第三正規化(3nf) 3nf在2nf的基礎之上,消除了非主屬性對於碼的傳遞函式依賴。也就是說, 如果存在非主屬性對於碼的傳遞函式依賴,則不符合3nf的要求。

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

為了讓資料表設計達到3nf,我們必須進一步進行模式分解為以下形式:

結論由此可見,符合3nf要求的資料庫設計,基本上解決了資料冗餘過大,插入異常,修改異常,刪除異常的問題。當然,在實際中,往往為了效能上或者應對擴充套件的需要,經常 做到2nf或者1nf,但是作為資料庫設計人員,至少應該知道,3nf的要求是怎樣的。

秒懂資料庫三正規化

懂得資料庫正規化,對於設計出乙個合理的資料庫有很大的幫助。本文根據自己對資料庫正規化的理解,結合具體的例子,嘗試著用通俗易懂的語言講明白資料庫三正規化。如果資料庫中所有的字段值都是不可拆分的原子值,那麼就滿足第一正規化了。簡單點說就是不能有表中表,所以關聯式資料庫都滿足第一正規化。例子略。第二正規化...

一文說透https中的s是什麼?

一 http 與 https 有哪些區別?1.http 是超文字傳輸協議,資訊是明文傳輸,存在安全風險。https 是在 tcp 和網路層之間加入了 ssl tls 安全協議,也就是安全套接字層,使得報文能夠加密傳輸。2.http 連線建立相對簡單,tcp 三次握手建立之後便可進行 http 的報文...

資料庫正規化 三正規化

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