王菲從出生時的「王菲」,到同學間的「大王菲」,再到身份證號「100321690808022」,香港發展時的「王靖雯」,最終回歸「王菲」。每個階段的「主鍵」都隨著情境變更,導致歌迷資料庫關聯混亂。這個故事生動詮釋了資料庫設計中主鍵不應使用業務屬性的核心原則。
關聯式資料庫要求每個資料表必須有主鍵,以唯一識別每一列。主鍵可以是單欄或複合欄,值不可重複。主鍵是資料表間建立關聯的基礎,體現「關聯」的本質。
| 屬性類型 | 例子 | 問題 |
|---|---|---|
| 姓名 | 王菲 | 重名機率高,且可能更名 |
| 身分證字號 | 100321690808022 | 跨國不通用,甚至有重碼案例;二代證擴碼曾造成系統劇痛 |
| 訂單編號 | ORD-20240101-001 | 業務規則可能變更,格式調整影響關聯 |
這些都是物件屬性:業務邏輯上可變的資訊。它們的唯一性由業務規則保證,而非本質保證。
優點:簡單、空間小、效能佳。缺點:分散式環境需處理種子衝突;高併發下可能成鎖爭用熱點。
優點:無需中央協調、天然適合分散式同步。缺點:佔用 16 位元組、索引碎片嚴重、隨機 I/O 影響效能。
結合時間遞增特性與隨機性,新產生的 ID 大於舊 ID,大幅減少索引碎片與隨機 I/O,兼具分散式唯一性與查詢效能。
主鍵設計的最高原則:專用識別碼欄位,完全脫離業務屬性。無論選用自增整數、GUID 或有序 ID,核心在於識別碼的唯一、永恆、無業務語意三大特質。這是通往物件導向資料庫設計的門檻,也是高效能、可維護系統的基石。