web-dev-qa-db-ja.com

複合主キーと外部キー参照用の個別の(代理)ID列

私は次のようにlocationsに関するデータベースを構築しようとしています:

  • 国→地域→町

国には、事前定義された世界の国、地域、町のリストが表示され、ユーザーが入力します。

地域はすべての場所に適用されるとは限らないため、空白の文字列が許可されます(したがって、多対多のリンクテーブル)。

これは私が思いついた最高のデザインです:

ER Diagram

town_id列はAUTO_INCREMENT&UNIQUEに設定されています。その後、他のテーブルで外部キー参照として使用されます。

town列自体は、複数の場所で同じ町名を持っている可能性があるため、一意ではありません。

townsテーブルは正しいですか?

私が尋ねる理由は、town_idを参照として持つのは奇妙に思えるからですが、これを主キーとして含めることも使用することもできません(そうすると、重複が発生するため)?

このアプローチが正しければ、フィードバックを歓迎します。

2
the_peacock

それ(town_id)を唯一の主キーとして使用することをお勧めします(私の最初のコメントが増分と一意性について真である場合)。地域/国IDは外部キーのみである必要があります。これにより、町の名前を複製することができます。

同じ名前の2つの町を持つ行政区画はないと確信しているので、country_id、region_id、townに一意のインデックスを付けることをお勧めします。これは、そのビジネスロジックを反映します。

2
Jaaz Cole