3

データベース内の都市、州、または国のいずれかにアイテムを関連付けたいと考えています。ただし、「items」テーブルに 1 つのフィールドだけを作成して、関連付けられている都市、州、または国のいずれかへのリンクを作成したいと考えています (「city_id」、「state_id」、および'country_id')。画像を参照してください。

間にテーブルを配置するトリックがあることは知っていますが、検索してもそのパターンは見つかりませんでした。

どうもありがとう!

J

データベースのモデリング

4

3 に答える 3

1

あなたが言うように、中間テーブルを使用できます:

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ます。

于 2012-04-24T16:22:55.060 に答える
1

5 番目のテーブルを追加することを検討しましたか: place。すべてcountryの 、stateおよびcityplaceです。Everyitemは に関連付けられていplaceます。

これはまだ正規化されていません。place3 つのテーブルの値のセットがばらばらであることを確認する作業を行う必要があります。itemまた、適切なテーブルに結合するには、さらに多くの作業を行う必要があります。(基本的に、一連の困難を別のものと交換します。)

于 2012-04-24T16:26:13.220 に答える
0

ここに別のアイデアがあります。あなたの考えを教えてください。

「アイテム」のフィールドはオプションであり、国、州、都市間の関係はすでに定義されているため、その方法を試すことができます。

国、州、および都市の主キーは、これら 3 つのテーブルすべてで一意の ID になります (例: 都市または国のエントリと同じ主キーを持つ州 ID はありません)。

次に、この一意の ID を「項目」テーブルと、それを探す場所をテーブルに与える「タイプ」(「都市」、「州」、「国」) に入れることができます。

いくつかの変更がある可能性があるため (例: 「地域」、「大陸」など)、連想テーブルを再生成するのではなく、単に新しいテーブルとタイプを「追加」する方がよい場合があります。

それは理にかなっていますか?

ありがとう!

于 2012-05-05T16:11:59.557 に答える