Database Normalization

Normalization 目的

  • 避免 redundent information
  • 更容易 understand、enhance、extend
  • 避免 anomalies

隨著 1NF ~ 5NF,有更多的 safety guarantee

1NF

  • 違反條件
    • 用 row order 傳達資訊
    • mixing data types in single column
      • 但 relational database 不會讓你這樣做
    • 存在沒有 primary key 的 table
    • repeating groups
      • 同一個 column 有多個數值,或是在同一個 row 存多個同類型的數值。
      • ex :
        player item
        roy 1 item_1, 4 item_2
        star 4 item_4
        player item_type1 quantity1 item_type2 quantity2
        roy item1 1 item2 4
        star item_4 4

2NF

  • 所有的 non-key attribute 都要 depend on 整個 PK
    • 非正式定義,有點細微差異
    • functional dependency
      • ex: {player_id, item_type} -> {item_Quantity}

3NF

  • transitive dependency
    • {A} -> {B} -> {C}
  • 所有 non-key attribute 都要 depend on the whole key,不能 depend on 其他 non-key attribute

Boyce-Codd Normal Form

  • 所有 attribute 都要 depend on the whole key,不能 depend on 其他 non-key attribute

4NF

  • multivalued dependency
    • 不像 functional dependency,箭頭後方的那項可以有多個 value
    • {Model} $\twoheadrightarrow$ {Color}
  • 一個 table 中的所有 multivalued dependency 必須依賴於 key

5NF

  • 沒有 Join Dependency
    • table 不能表示成其他 table join 起來的結果