1. 程式人生 > >【正規化與函式依賴】3NF與BCNF的區別

【正規化與函式依賴】3NF與BCNF的區別

 

*本文中碼指代候選碼,主屬性為構成碼的屬性。

先簡要引入幾個概念

圖1


圖2

  單拿出來我認為不是很好理解的3NF和BCNF詳細的說說。

  書上寫了,BCNF是完善後的3NF。從圖2中顯然得出,1-3NF都是規範非主屬性與碼之間的關係。而主屬性之間的關係沒有規範。有人說了 ,要是構成碼的主屬性之間存在部分函式依賴或傳遞函式依賴,那麼這就不是碼,是超碼了。too young!誰告訴你碼必須是一個了?比方說AB->C,BC->A,此時AB、BC都是碼即ABC都是主屬性。所以ABC之間有什麼函式依賴不在1-3NF的約束之內。所以需要有BCNF來約束主屬性之間的函式依賴了。

 舉個例子,R={AB->C,BC->A,C->A},R的碼為AB、BC,故主屬性為ABC,R為3NF。但是函式依賴C->A,決定因素C不包含碼BC故R不是BCNF。