Normalization

DB Normalization 最終得到 2 個類似的表

  • May 11, 2016

我已經在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結束位置。

引用自:https://dba.stackexchange.com/questions/138093