跨來源的正規形式定義寬嚴不同,記判準比記條號可靠
「這違反第幾正規化」聽起來像有標準答案,但實際比對兩份中文教材就會發現:同一個條號,兩邊收的東西不一樣。
以 1NF 為例:
| 來源 | 它的 1NF 要求 |
|---|---|
| tigercosmos/一般教科書 | 只有一條:每一格必須是原子值 |
| ExplainThis | 三條:原子值 + 沒有任兩筆資料完全重複 + 有 PK 且其他所有欄位都相依於 PK |
最後那條是 2NF 的內容被提前寫進 1NF。後果很具體:資料庫正規化(一~三) 裡「做完 1NF 但還到處重複」的那張表,照 ExplainThis 的寫法根本不算 1NF,但那篇和教科書都把它算 1NF。
同樣的浮動也出現在 BCNF 上 — 有的教材寫「非主鍵欄位」,正確的判準其實是候選鍵(見 正規化的判準是候選鍵,不是主鍵)。
所以該記什麼
條號是各家自己排的標籤,判準才是穩定的東西。 與其記「這違反 3NF」,不如直接記相依的形狀:
X → Y,但 X 不是 superkey ← 說得出這句,就不需要背條號
Y 是鍵值欄位 → 3NF 放行、BCNF 擋下 ← 差別在這,不在「第幾階」
實務上的講法也一樣:跟人討論 schema 時說「老師 → 課程,但老師識別不了一列,所以這個事實會被抄很多次」,比說「這張表違反 BCNF」精確得多,而且對方不必先跟你對齊用的是哪一本教材。
同一件事的三個入口:正規化的三個階段是同一個問句的三種問法(1NF~3NF 的共同問句)、正規化的五個階段對應三種相依性(五個階段的全景)、BCNF 拿掉 3NF「只檢查非鍵值欄位」的前提(條文差一個子句的後果)。