[資料庫] 03. 資料庫設計

 · 1 min read

一些名詞

  • 欄位 空值 表示:
    • 不適用(如女學生無兵役)。
    • 未知(如學校資料中沒有學生的手機)。
  • view:來自Table,可能合併多個Table。
  • 關連模行中:
    • Table:也稱關連、實體(Entity)。
    • 縱:欄位(Field)、屬性(Attribute)。
    • 橫:紀錄、值組(Tuple)。




關連式資料庫設計

  1. 鍵值完整性限制(key Integrity Constraint):Key 不可為 Null Value。
  2. 領域完整性限制(Domain Integrity Constraint):屬性值規範。(如{男, 女})
  3. 實體完整性限制(Entity Integrity Constraint):Key 不可重複。
  4. 參考完整性限制:
    • 被參考:父關聯,主鍵 Primary Key
    • 參考父關聯:子關連,Foreign Key




正規化

正規化(Normalization)是關聯式資料庫在設計資料表時,用來消除資料儲存異常的處理方法。

  • 不允許多重值屬性。
  • 去除部分相依性。
  • 去除間接相依性。



1. 第一階正規化 (First Normal Form, 1NF)

  • 一格(每一列每一欄)只能有一筆資料。
  • 每筆資料都有一個唯一的主鍵作為識別。

如:

  1. 將紀錄拆開

  2. 上表有兩個"王小明",必須加上主鍵來做識別。



2. 第二階正規化 (Second Normal Form, 2NF)

  • 符合1NF。
  • 所有非主鍵欄位都和主鍵欄位具有相依性。

如:

  1. 在一張交易單中,主鍵 交易Id,跟(交易)日期(交易)商品,都很明確有意義上的關聯,但加上去的 客人Id,跟這些欄位就不能說有直接的關聯了。為了符合2NF的規範,將帳本拆成了2張表。 ​

  2. 這邊交易表中的 客人Id 已經變成外鍵了。



3. 第三階正規化 (Third Normal Form, 3NF)

  • 符合 1NF 及 2NF。
  • 非主鍵欄位彼此都具有相依性。

如:

  1. 商品明細付款方式,是無法互相決定對方內容的,也就是互不相依的,阿嬤發現這樣並不符合 3NF 規範,決定再怒拆。

  2. 拆完之後發現交易表剩下一堆外鍵。



  • 還有其他正規化方式,以下不常用,稍微了解即可:
    • BC正規化 (Boyce–Codd Normal Form, BCNF)
    • 第四階正規化 (Fourth Normal Form, 4NF)
    • 第五階正規化 (Fifth Normal Form, 5NF)
    • 第六階正規化 (Sixth Normal Form, 6NF)
    • DK正規化 (Domain/Key Normal Form, DKNF)




資料庫設計

  • 由大而小:實體>屬性>實體間關連
  • 由小而大:屬性收集>分類成不同實體>實體間關連>資料流程圖




ref: