私のデータベースには 2 つのテーブルがあり、1 つは都市の距離マトリックスで、もう 1 つは都市を保持しています。私の最初の構造は次のようなものでした:
- 街
- ウイド
- 名前
- 緯度
- 経度
と
- 距離
- FromCityID
- 都市IDへ
- 距離長さ
UUID
は CITY テーブルの主キーであり、FromCityID
CITYToCityID
をそれぞれ外部キーとして参照します。2 つの都市間の距離は一意である必要があるため、どちらも DISTANCE テーブルの複合主キーです。
UUID
しかし、都市と距離を保持する XML からこのデータベースにデータをアップロードするため、自動インクリメントを主キーとして使用したくないことに気付きました。また、距離には、現在の XML で言及されている都市だけでなく、データベースから以前に保存された都市も含まれる場合があります。
データベースと XML で同じ ID のシステムが必要です。緯度/経度が最適なオプションと思われるため、テーブルを次のように変更しました。
- 街
- 名前
- 緯度
- 経度
と
- 距離
- FromCityID緯度
- FromCityID経度
- ToCityID緯度
- ToCityID経度
- 距離長さ
Latitude
CITY テーブルのLongitude
複合主キーです。FromCityIDLatitude
/FromCityIDLongitude
およびToCityIDLatitude
/ToCityIDLongitude
はそれぞれ CITY を外部キーとして参照し、4 つの列はすべて DISTANCE テーブルの複合主キーです。
しかし、主キーとして 4 つの列を使用するのは悪い設計です。この場合、何が一番いいですか?