一些名詞
- 欄位 空值 表示:
- 不適用(如女學生無兵役)。
- 未知(如學校資料中沒有學生的手機)。
- view:來自Table,可能合併多個Table。
- 關連模行中:
- Table:也稱關連、實體(Entity)。
- 縱:欄位(Field)、屬性(Attribute)。
- 橫:紀錄、值組(Tuple)。
關連式資料庫設計
- 鍵值完整性限制(key Integrity Constraint):Key 不可為 Null Value。
- 領域完整性限制(Domain Integrity Constraint):屬性值規範。(如{男, 女})
- 實體完整性限制(Entity Integrity Constraint):Key 不可重複。
- 參考完整性限制:
- 被參考:父關聯,主鍵 Primary Key。
- 參考父關聯:子關連,Foreign Key。
正規化
正規化(Normalization)是關聯式資料庫在設計資料表時,用來消除資料儲存異常的處理方法。
- 不允許多重值屬性。
- 去除部分相依性。
- 去除間接相依性。
1. 第一階正規化 (First Normal Form, 1NF)
- 一格(每一列每一欄)只能有一筆資料。
- 每筆資料都有一個唯一的主鍵作為識別。
如:
將紀錄拆開
上表有兩個"王小明",必須加上主鍵來做識別。
2. 第二階正規化 (Second Normal Form, 2NF)
- 符合1NF。
- 所有非主鍵欄位都和主鍵欄位具有相依性。
如:
在一張交易單中,主鍵 交易Id,跟(交易)日期、(交易)商品,都很明確有意義上的關聯,但加上去的 客人Id,跟這些欄位就不能說有直接的關聯了。為了符合2NF的規範,將帳本拆成了2張表。
這邊交易表中的 客人Id 已經變成外鍵了。
3. 第三階正規化 (Third Normal Form, 3NF)
- 符合 1NF 及 2NF。
- 非主鍵欄位彼此都具有相依性。
如:
如 商品明細 和 付款方式,是無法互相決定對方內容的,也就是互不相依的,阿嬤發現這樣並不符合 3NF 規範,決定再怒拆。
拆完之後發現交易表剩下一堆外鍵。
- 還有其他正規化方式,以下不常用,稍微了解即可:
- BC正規化 (Boyce–Codd Normal Form, BCNF)
- 第四階正規化 (Fourth Normal Form, 4NF)
- 第五階正規化 (Fifth Normal Form, 5NF)
- 第六階正規化 (Sixth Normal Form, 6NF)
- DK正規化 (Domain/Key Normal Form, DKNF)
資料庫設計
- 由大而小:實體>屬性>實體間關連
- 由小而大:屬性收集>分類成不同實體>實體間關連>資料流程圖