E.F. Codd 於 1985 年提出的十二條法則,至今仍是判斷一個 DBMS 是否為真正關係型(RDBMS)的金標準。本文逐條解析每條法則的內涵、違反案例,並對照 Oracle 實現機制說明其合規性。
系統必須能夠通過其關係型能力單獨管理數據庫。
Oracle 通過 SQL 單一語言實現 DDL/DML/DCL/查詢,滿足基線。
所有信息(包括表名、列名、約束、視圖定義)均以表中數值形式顯式表示。
Oracle 實現:`ALL_TABLES`、`ALL_TAB_COLUMNS`、`ALL_CONSTRAINTS` 等數據字典視圖。
反例:將 VIN(車輛識別碼)作為單列存儲,實際包含產地、車型、年份等多層信息,違反原子性。
每個數據項必須可通過「表名 + 主鍵值 + 列名」邏輯地址唯一訪問。
Oracle 實現:主鍵/唯一索引保證行唯一性,SQL 投影操作定位列。
反例:使用物理 ROWID、數組下標、指針直接訪問數據。
NULL 統一表示「缺失/不適用」,與 0、空字符串、空格嚴格區分,並系統化處理。
Oracle 實現:`IS NULL`/`IS NOT NULL`、三值邏輯(TRUE/FALSE/UNKNOWN)、`NVL`/`COALESCE`、`NULLS FIRST/LAST` 排序控制。
注意:Oracle 將空字符串 `''` 視同 `NULL`,此為歷史兼容偏差。
數據字典以關係表形式存儲,可通過常規查詢語言訪問。
Oracle 實現:`SYS` 擁有基表(`OBJ$`、`TAB$`、`COL$` 等),公開 `DBA_`/`ALL_`/`USER_` 視圖,完全符合。
單一語言支援數據定義、操作、完整性、授權、事務控制,且為唯一訪問路徑。
Oracle 實現:SQL 滿足所有需求。
例外:`EXPDP`/`IMPDP`、`RMAN`、外部表等繞過 SQL 引擎,屬規則 12 範疇。
所有理論上可更新的視圖,系統必須支援更新操作。
Oracle 實現:單表視圖、鍵保持連接視圖可直接 DML;複雜視圖需 `INSTEAD OF` 觸發器實現更新邏輯。
支援集合層面的 INSERT/UPDATE/DELETE(非逐行)。
Oracle 實現:多行 `INSERT`、`MERGE`、條件 `UPDATE`/`DELETE` 全為集合操作,單條 SQL 影響百萬行無需循環。
應用不依賴物理存儲結構(文件遷移、重命名、分區調整不影響應用)。
Oracle 實現:表空間/數據文件/分區/壓縮/存儲層完全透明,`ALTER TABLE MOVE`、`ONLINE REDEFINITION` 零停機變更。
應用不依賴邏輯結構(拆表、加列、視圖重構不影響應用)。
Oracle 實現:`EDITION BASED REDEFINITION`(版本化重定義)、`INVISIBLE COLUMNS`、視圖層解耦,DDL 操作不阻塞 DML。
完整性約束定義於數據字典,而非應用代碼。
Oracle 實現:`PK`/`FK`/`CHECK`/`NOT NULL`/`TRIGGER` 全在字典中,`ENABLE/DISABLE VALIDATE/NOVALIDATE` 靈活控制。
分佈數據庫對應用透明,本地/遠程訪問無差別。
Oracle 實現:`DBLINK`、`GLOBAL NAMES`、`TWO_PHASE_COMMIT`、Sharding(12c+)實現位置透明。
低級接口(載入/備份/複製工具)不得繞過安全性與完整性規則。
Oracle 實現:`SQL*Loader`/`EXPDP` 預設檢查約束、觸發器;`DIRECT=TRUE`、`DISABLE_CONSTRAINTS` 等繞過選項需顯式指定,DBA 需自行評估風險。
| 法則 | 合規等級 | 備註 |
|---|---|---|
| 1 信息法則 | ★★★★☆ | 字典完整,但空字符串=NULL 屬微小偏差 |
| 2 保證存取 | ★★★★★ | 完全符合 |
| 3 空值處理 | ★★★★☆ | 三值邏輯完整,空串處理有爭議 |
| 4 動態目錄 | ★★★★★ | 標準實現 |
| 5 綜合語言 | ★★★★☆ | 工具繞過屬規則12管轄 |
| 6 視圖更新 | ★★★★★ | INSTEAD OF 觸發器完美補足 |
| 7 集合操作 | ★★★★★ | 原生集合語義 |
| 8 物理獨立 | ★★★★★ | 業界標桿 |
| 9 邏輯獨立 | ★★★★★ | 版本化重定義領先 |
| 10 完整性獨立 | ★★★★★ | 字典驅動約束 |
| 11 分佈獨立 | ★★★★☆ | DBLINK 透明,Sharding 尚在演進 |
| 12 非破壞 | ★★★★☆ | 工具繞過有開關,DBA 責任明確 |
Oracle 在 Codd 十二法則上達到 95%+ 合規,是商業 RDBMS 的標桿實現。理解這些法則不僅利於面試考核,更能指導架構設計:堅持邏輯設計先行、約束前置、視圖解耦、統計信息驅動優化,才能發揮 RDBMS 核心價值。