資料庫(都是申論)
增刪查改(有表沒做正規化,對於新增刪除會有什麼異常)
1. 未正規化表格的「增、刪、改」異常 (Anomalies)
申論題最棒的寫法是「先講定義,再舉個例子」。假設有一張未正規化的「學生資料表」,裡面同時塞了「學號、姓名、系所代號、系所名稱」。
- 新增異常 (Insertion Anomaly):
- 定義:當你想新增一筆資料,卻因為缺少主鍵的某部分而無法新增。
- 舉例:學校剛成立一個新的「資工系」,但因為還沒有任何學生入學(缺少學號),導致你無法把「資工系」的資訊存進資料庫裡。
- 刪除異常 (Deletion Anomaly):
- 定義:刪除某筆特定資料時,不小心把其他不該刪除的重要資訊也一併刪掉了。
- 舉例:資工系目前只有一個學生,當這個學生畢業,你把這筆學生紀錄刪除時,連同「資工系」的存在紀錄也一起從資料庫消失了。
- 修改/更新異常 (Modification/Update Anomaly):
- 定義:因為資料重複儲存,當需要修改某個欄位時,必須同時修改多筆紀錄,只要漏改一筆就會造成資料庫不一致。
- 舉例:如果「資管系」要改名為「資訊管理學系」,你必須把表裡面幾百個資管系學生的紀錄全部更新一遍,漏改一個就會出現兩個不同的系名。
正規化1、2、3表格設計
2. 正規化 1NF、2NF、3NF 表格設計
申論題口訣:「1NF:抓出單一值」、「2NF:消除部分相依」、「3NF:消除遞移相依」。
- 第一正規化 (1NF - First Normal Form):
- 原則:確保每個欄位都是「不可分割的單一值 (Atomic)」,且沒有重複的群組。
- 設計動作:不能把多個值塞在同一個格子裡。例如「聯絡電話」欄位不能同時填寫「手機和市話」,必須拆成不同的欄位或不同的紀錄。
- 第二正規化 (2NF - Second Normal Form):
- 原則:必須先符合 1NF。且所有非主鍵欄位,都必須「完全相依」於主鍵,不能只相依於主鍵的一部分。
- 設計動作:這通常發生在「複合主鍵」的狀況。例如一張訂單明細表的主鍵是「訂單編號+商品編號」,那「商品名稱」只能依賴商品編號,這就叫部分相依。解決方法是把商品資訊獨立拉出去,建立一張「商品表」。
- 第三正規化 (3NF - Third Normal Form):
- 原則:必須先符合 2NF。且所有非主鍵欄位之間不能互相依賴,也就是「消除遞移相依」。
- 設計動作:例如員工表中有「員工編號(主鍵)、部門編號、部門名稱」。「部門名稱」其實依賴於「部門編號」,這就是遞移相依。解決方法是把部門資訊拉出去,獨立建立一張「部門表」。
3. Oracle 建立 Table 指令 (欄位、資料類型、約束)
考試時直接寫出一個包含這三大要素的完整 CREATE TABLE 範例,閱卷老師一看就知道你懂。
約束 (Constraints) 五大天王:
PRIMARY KEY (主鍵,唯一且不可為空)
NOT NULL (不可為空值)
UNIQUE (唯一值,不可重複)