建立一個滿足第一正規化 (DBMS) 的示例表格


如果一個表存在資料冗餘且未正確規範化,則難以處理和更新。如果關係包含複合屬性或多值屬性,則違反第一正規化。

如果滿足以下條件,則表處於第一正規化:

  • 只有單值屬性。
  • 屬性域不變。
  • 每個屬性或列都有唯一的名稱。
  • 資料儲存的順序無關緊要。

示例

考慮下表:

ID姓名課程
1AC1,C2
2EC3
3BC2,C3

上表是非規範化形式,課程屬性具有多值屬性,違反了第一正規化。

現在我們透過為每門課程建立一個新行來表示上表:

ID姓名課程
1AC1
1AC2
2EC3
3BC2
3BC4

上表由於課程存在冗餘資料,因為對於每個課程編號,我們都必須重複所有學生的資訊。因此,課程屬性應與上表分離。

我們將上表 R 分解成兩個表,這是規範化的概念:

R1(鍵, 多值屬性), R2(R-多值屬性)

=>R1(Id, course), R2(Id , name).

分解第一正規化表的步驟

將重複組中出現的所有專案放在新表中。為生成的每個新表找到主鍵。在新表中複製從中提取重複組的表的原表主鍵,反之亦然。

R1

ID課程
1C1
1C2
2C3
3C2
3C4

R2

ID姓名
1A
2E
3B

R1 和 R2 都滿足第一正規化。

R1 的鍵 = ID

R2 的鍵 = (學號, 課程)

上表現在滿足第一正規化,因為沒有多值屬性。但它不滿足第二正規化,因為 ID->name 是部分依賴關係 {因為姓名依賴於鍵的一部分}。

異常

該表還存在以下異常:

  • **插入異常** — 除非我們有學生需要學習該科目,否則我們無法將新的課程(例如“C6”)插入到表中。

  • **更新異常** — 如果我們將課程從 C2 更改為 C5,則必須在多個地方進行更改,否則表將不一致。

更新於:2021年7月6日

373 次檢視

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.