データベース内の都市、州、または国のいずれかにアイテムを関連付けたいと考えています。ただし、「items」テーブルに 1 つのフィールドだけを作成して、関連付けられている都市、州、または国のいずれかへのリンクを作成したいと考えています (「city_id」、「state_id」、および'country_id')。画像を参照してください。
間にテーブルを配置するトリックがあることは知っていますが、検索してもそのパターンは見つかりませんでした。
どうもありがとう!
J
データベース内の都市、州、または国のいずれかにアイテムを関連付けたいと考えています。ただし、「items」テーブルに 1 つのフィールドだけを作成して、関連付けられている都市、州、または国のいずれかへのリンクを作成したいと考えています (「city_id」、「state_id」、および'country_id')。画像を参照してください。
間にテーブルを配置するトリックがあることは知っていますが、検索してもそのパターンは見つかりませんでした。
どうもありがとう!
J
あなたが言うように、中間テーブルを使用できます:
CREATE TABLE regions (
region_id INT NOT NULL AUTO_INCREMENT,
country_id INT NOT NULL,
state_id INT,
city_id INT,
PRIMARY KEY (region_id),
UNIQUE KEY (country_id, state_id, city_id)
CONSTRAINT FOREIGN KEY (country_id) REFERENCES countries (id),
CONSTRAINT FOREIGN KEY (country_id, state_id) REFERENCES states (country_id, id),
CONSTRAINT FOREIGN KEY ( state_id, city_id) REFERENCES cities ( state_id, id)
)
regions
州または都市がどこにあるかを含め、可能なすべての (国、州、都市) の組み合わせでこのテーブルを更新し続ける必要がありNULL
ます。
5 番目のテーブルを追加することを検討しましたか: place
。すべてcountry
の 、state
およびcity
はplace
です。Everyitem
は に関連付けられていplace
ます。
これはまだ正規化されていません。place
3 つのテーブルの値のセットがばらばらであることを確認する作業を行う必要があります。item
また、適切なテーブルに結合するには、さらに多くの作業を行う必要があります。(基本的に、一連の困難を別のものと交換します。)
ここに別のアイデアがあります。あなたの考えを教えてください。
「アイテム」のフィールドはオプションであり、国、州、都市間の関係はすでに定義されているため、その方法を試すことができます。
国、州、および都市の主キーは、これら 3 つのテーブルすべてで一意の ID になります (例: 都市または国のエントリと同じ主キーを持つ州 ID はありません)。
次に、この一意の ID を「項目」テーブルと、それを探す場所をテーブルに与える「タイプ」(「都市」、「州」、「国」) に入れることができます。
いくつかの変更がある可能性があるため (例: 「地域」、「大陸」など)、連想テーブルを再生成するのではなく、単に新しいテーブルとタイプを「追加」する方がよい場合があります。
それは理にかなっていますか?
ありがとう!