我的數據庫包含兩個表格,一個是城市距離矩陣,另一個是城市。我的第一個結構是這樣的:在數據庫中組織主鍵的更好方法是什麼?
- 市
- UUID
- 名稱
- 緯度
- 經度
和
- 距離
- FromCityID
- ToCityID
- DistanceLength
UUID
是城市表,FromCityID
和ToCityID
參考CITY各自外鍵的主鍵,又都是複合DISTANCE表的主鍵,因爲兩個城市之間的距離應該是唯一的。
但後來意識到我不想使用UUID
和自動增量作爲主鍵,因爲我從XML數據上載數據,XML包含城市和距離。而距離可能不僅包括那些在當前XML中提到的城市,而且還包括之前從數據庫中存儲的城市。
我需要一個跨數據庫和XML的ID相同的系統。經/緯度似乎是最好的選擇,所以我改變了我的表,這樣的:
- 市
- 名稱
- 緯度
- 經度
和
- 距離
- FromCityIDLatitude
- FromCityIDLongitude
- ToCityIDLatitude
- ToCityIDLongitude
- DistanceLength
Latitude
和Longitude
是城市表的複合主鍵; FromCityIDLatitude
/FromCityIDLongitude
和ToCityIDLatitude
/ToCityIDLongitude
將CITY分別作爲外鍵,並且所有四列都是DISTANCE表的複合主鍵。
但是,使用4列作爲主鍵是一個糟糕的設計。這種情況下最好的是什麼?
謝謝你的建議! 「第四片葉子」是什麼意思? – user1788867
沒問題:-)。在你的情況下,第四頁將是PK的第四列「ToCityIDLongitude」。 – Ben
我會給予好評這一點,如果不是因爲赤裸裸的,但可惜與指標混爲一談按鍵都太常見的誤解/混淆。關鍵是唯一性約束,是邏輯層次的構造。索引是數據庫物理組織的一個組成部分。鍵和索引幾乎沒有相同的東西,他們甚至不必以「1對1」的意義出現。並不是每個關鍵碼都需要通過自己的索引來實施,索引主要不是用來支持關鍵碼。 –