遞移相依:欄位靠另一個普通欄位才連到主鍵

欄位1 和主鍵相關,欄位2 和欄位1 相關,那麼欄位2 和主鍵就是遞移相依。第三正規化要消除的就是這個。

一眼看得出來的例子

items(id PK, name, price, store_id, store_name, store_address)
id (PK)namepricestore_idstore_namestore_address
1鉛筆201久成久東區大學路
2橡皮擦501久成久東區大學路

主鍵是單一欄,2NF 沒問題。但 store_name 根本不是「鉛筆的名字」,它是**「1 號商店的名字」**——要繞一圈才連得到主鍵:

id → store_id → store_name
     ^^^^^^^^ 中間這個是普通欄位,不是主鍵

為什麼要消除

久成久改名,要改的不是一列,是所有久成久賣的商品那一堆列。修法是把 store_id / store_name / store_address 抽成獨立的 stores 表,商品只留 FK。

判準一句話:非主鍵欄位彼此之間應該互相獨立,誰也不許靠著誰才連到主鍵。

別跟衍生欄位搞混

total_amount = price × count 這種欄位也該拿掉,但理由不同,見 衍生欄位該拿掉的理由不是遞移相依。三個 NF 的關係見 正規化的三個階段是同一個問句的三種問法。