*本文中碼指代候選碼,主屬性為構成碼的屬性。
先簡要引入幾個概念
圖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。