1. 程式人生 > 資料庫 >資料庫三大正規化--大白話

資料庫三大正規化--大白話

第一正規化(1NF):強調的時列的原子性,即列不能再被分成其他列

如:[聯絡人](姓名,性別),姓名和性別時不能被拆分了,所以滿足INF,電話可以拆分為家庭電話,公司電話,不滿足1NF

[聯絡人](姓名,性別,電話)-->1NF:[聯絡人](姓名,性別,家庭電話,公司電話)

 

第二正規化(2NF):首先滿足1NF,另外包含兩部分內容:

①表必須有主鍵

②沒有包含在主鍵中的列必須完全依賴主鍵,而不能只依賴主鍵的一部分

如:[OrderDetail](OrderID, ProductID, UnitPrice, Discount, Quantity,ProductName)

主鍵(OrderID,ProductID),Discount,Quantity完全依賴與主鍵,而UnitPrice,ProductName只依賴與ProductID,所以[OrderDetail]不滿足2NF.

修改:[OrderDetail](OrderID, ProductID, Discount, Quantity)和[Product](ProductID,UnitPrice,ProductName)

 

第三正規化:首先滿足2NF,另外非主鍵列必須直接依賴與主鍵,不能存在傳遞依賴,即不能存在:非主鍵列A依賴與非主鍵列B,非主鍵列依賴於主鍵的情況

如:[Order](OrderID,OrderDate,CustomerID,CustomerName,CustomerAddress,CustomerCity)

主鍵是OrderID,其中OrderDate, CustomerID, CustomerNameCustomerAddress,CustomerCity都完全依賴於OrderID符合2NF,但是

CustomerNameCustomerAddress,CustomerCity都直接依賴於CustomerID,通過傳遞才依賴於主鍵,不符合3NF.

修改:[Order](OrderID,OrderDate,CustomerID)和 [CustomerID](CustomerName,CustomerAddress,CustomerCity)