Normalization
DB Normalization 最終得到 2 個類似的表
我已經在Google上搜尋了很長時間,閱讀了很多規範化教程,但還沒有找到我的問題的答案……
問題(在這個問題中)是當我有類似旅行的東西時,它有一個開始位置和結束位置,但這些位置儲存在一個表上並分配了一個 ID。
如果我遵循規範化教程,我最終會得到:
聯合國基金會
TripID, VehicleId, EndLocId, StartLocId, StartLocAddress, EndLocAddress
所以如果我規範化,我最終會得到這些表
1NF = UNF(無重複組)
2NF = 1NF(無部分依賴)
3NF(分離過渡依賴)
Trip(TripId, VehicleId, StartLocId, EndLocId) TripStartLoc(StartLocId, StartAddress) TripEndLoc(EndLocId, EndLocAddress)
在我的 3NF 中,最後 2 個表完全相同,所以我只想使用一個 Location(LocId, LocAddress)
Trip(TripId, VehicleId, StartLocId, EndLocId) Location(LocId, LocAddress)
但是我找不到任何允許我這樣做的步驟,我知道我可以這樣做,因為維護 2 個包含重複資訊的表是沒有意義的……但是如何證明呢?或者這一步在規範化之外?我只希望行程表中的 2 個外鍵指向位置表,一個指向起點,一個指向終點。
謝謝您的幫助
規範化的目的是從數據模型中移除插入、更新和刪除異常。例如,如果您的位置名稱有拼寫錯誤,或者說經緯度不正確,您可能需要一個地方來更改該資訊。您的兩個表的解決方案對我來說似乎是正確的。每一列都依賴於鍵、整個鍵,除了表的鍵之外什麼都沒有。
您可以在 Location 表中添加一個額外的欄位來區分開始和結束位置:
Trip(TripId, VehicleId, StartLocId, EndLocId) Location(LocId, LocAddress, LocType)
額外的欄位
LocType
應該是boolean
具有兩個值之一的類型(0,1)
。您可以
0
用於開始位置和1
結束位置。