Oracle 資料庫作為企業級關聯式資料庫的標竿,其核心理論與實作技能是資料庫管理員 (DBA) 與後端工程師的必修課。本文濃縮正規化範式、實體與屬性、資料庫設計方法論、SQL 核心語法(串聯、多表連接、單行函數、日期函數)與日期格式化元素,構建一份高密度知識速查表。
一、正規化範式階層
| 範式 | 定義條件 | 解決異常 |
| 1NF | 無重複群、有主鍵 | 原子性 |
| 2NF | 符合 1NF + 無部分相依 (非鍵屬性完全相依於主鍵) | 插入/刪除/更新異常 (部分) |
| 3NF | 符合 2NF + 無傳遞相依 (非鍵屬性不相依於其他非鍵屬性) | 傳遞相依異常 |
| BCNF | 符合 3NF + 每個決定因素皆為候選鍵 | 多候選鍵重疊導致的異常 |
| 4NF | 符合 BCNF + 無多值相依 | 多值相依異常 |
| 5NF | 重組連接無損失 (投影-連接正規化) | 連接相依異常 |
| DK/NF | 僅含定義域約束與鍵約束 | 所有修改異常 |
二、實體、屬性與關係
- 實體:可識別的客觀事物 (如「學生」、「課程」)
- 屬性:實體特性 (如學生的學號、姓名、系別)
- 關係:實體間聯繫 (一對一、一對多、多對多)
三、資料庫設計四階段與三大方法論
- 需求分析 → 資訊分析與定義 → 設計實現 → 物理設計
- 基於 3NF:識別全部屬性與相依 → 單一模式 → 投影分解達 3NF
- 基於 E-R 圖:構建企業模式 → 轉換為目標 DBMS 概念模式
- 基於視圖:各應用建立視圖 → 合併整合為全域概念模式
四、SQL 核心語法速查
1. 串聯與描述表
- 串聯運算子:
|| (如 'Hello' || 'World')
- 描述表結構:
DESCRIBE table_name 或 DESC table_name
2. 多表連接類型
| 連接類型 | 定義 | 分類 |
| 笛卡爾積 | 無關聯條件直接多表查詢 | 內連接 |
| 等值連接 | 主外鍵值相等 (最常用) | 內連接 |
| 非等值連接 | 範圍比較如 BETWEEN ... AND | 內連接 |
| 自我連接 | 單表內屬性關聯 (如員工-主管) | 內連接 |
| 外連接 | 保留無對應記錄的一方 (LEFT/RIGHT/FULL) | 外連接 |
3. 常用單行函數
| 分類 | 函數 | 說明 |
| 大小寫轉換 | LOWER/UPPER(str) | 全字串轉小寫/大寫 |
INITCAP(str) | 每個單字首字母大寫 |
| — | — |
| 字串處理 | SUBSTR(str, pos, len) | 擷取子字串 (位置從 1 起算) |
LENGTH(str) | 字串長度 |
LPAD/RPAD(str, n, pad) | 左/右填充至長度 n |
LTRIM/RTRIM(str, chars) | 移除左/右側指定字元 (預設空白) |
REPLACE(str, old, new) | 替換所有出現的子字串 |
CONCAT(s1, s2) | 串聯兩字串 (等同 ||) |
| 數值處理 | ROUND(num, dec) | 四捨五入;dec<0 從整數位處理 |
TRUNC(num, dec) | 直接捨去;dec<0 同理 |
| 日期函數 | MONTHS_BETWEEN(d1, d2) | 兩日期月份差 (可為小數) |
ADD_MONTHS(d, n) | 日期加減 n 月 |
NEXT_DAY(d, 'DAY') | 日期之後下一個指定週幾 |
LAST_DAY(d) | 該月最後一天 |
TO_DATE(str, fmt) / TO_CHAR(d, fmt) | 字串↔日期轉換,fmt 見下表 |
4. 日期格式化元素速查
| 元素 | 意義 | 範例 |
| YYYY | 4 位年份 | 2024 |
| YY / Y | 年份後 2/1 位 | 24 / 4 |
| MM | 2 位月份 | 03 |
| MON / MONTH | 月份縮寫/全寫 | MAR / MARCH |
| DD | 月內第幾天 | 15 |
| DAY / DY | 星期全寫/縮寫 | FRIDAY / FRI |
| HH24 / HH12 | 24/12 小時制 | 14 / 02 |
| MI / SS | 分 / 秒 | 30 / 59 |
| RM | 羅馬數字月份 | III |
將上述核心知識內化為肌肉記憶,並配合實際資料庫環境練習,即能在設計、開發、調優與維運各階段遊刃有餘。