例1:"国"、 "都道府県"、 "市"テーブルの設計方法は?
xTable: xTableID, CountryName, PovinceName, CityName
- OR
実施例2:
Country: CountryID, CountryName
Province: ProvinceID, ProvinceName
City: CityID, CityName
質問:
アプリケーションレベルで国、都道府県、市区町村のリストを入力して、例1のデザインを使用することをお勧めしますか?または、例2のようにDBレベルに入力する必要がありますか?
都道府県(該当する場合)または国名に基づいて市が表示されます。州(もしあれば)は選ばれた国に基づいて表示されます。州は1つの国のみになり、都市は1つの州/国のみになります。多くの関係に多くの誰が/ので、私は
NOTE以下のように設計されていない:すべての国が確かに街がありますが、すべての国が都道府県名を持つことになりません。
Country: CountryID (PK), CountryName
Province: CountryID (PK - FK), ProvinceName
City: CountryID (PK - FK), CityName
私は別の提案を思いつきました。 ID、CountryID、ProvinceID、CityIDという列を持つ新しいテーブルを作成します。私はこれが多対多の関係を満たしていることを知っていますが、扱いが容易です。記載されたデザインに関するコメントはありますか? – user311509
私はそれが大好きだとは言えません。エンティティ間の厳密な関係を維持することがどれほど重要であるかによって異なります。テーブルデザインは、Cityが複数の国に関連することを制限するものではありません。プログラムを使用するとエラーが発生する可能性があります。厳密な関係を維持するためにDBを使用したい場合は、これを行う方法ではありません。その一方で、いくつかのコードを起動して実行するための迅速かつ厄介な修正に興味があれば、おそらくあなたのCityIDがプライマリキーである必要があります。だから私は上記の2つのソリューションのいずれかと一緒に行くだろう。 –
サイドノート:Country&Provinceの選択に基づいてフィルタのドロップダウン値などのデータを使って何かをしたいと思っています。分岐コードを避けるために、仮想州ソリューション(州を持たない各国ごとに架空の州が作成されています)が最もシンプルになります。国が想像上の都道府県のみを持っているかどうかをチェックし、その都道府県のドロップダウンを無効にすることもできます。国が1つの州(虚偽か否か)がある場合は、都市ドロップダウンをあらかじめロードすることもできます。 –