3

私のデータベースに都市、州または国のいずれかに関連づけてアイテムを関連付ける必要があります。しかし、私は 'items'テーブルに1つのフィールドしか持たず、都市、州、またはそれが関連付けられている国へのリンクを作成したい(3つのエントリ 'city_id'、 'state_id'および'country_id')。画像を参照してください:複数のテーブルとの関連付けについて(データベース)

私は間にテーブルを置くトリックがあることを知っていますが、私は検索し、まだそのパターンを見つけていません。

ありがとうございます!

J

Database modeling

答えて

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

+0

これは正規化されていますが、すべてのクエリに新しい「JOIN」を追加するだけです...しかし、あなたが正しいです、それはOPが求めていたようです。 – rid

+0

@eggyal:私はシステムの別の部分に集中しなければなりませんでしたが、すぐにこれに戻ります。私はすでにあなたの答えをupvotedしているが、私はそれが私がやっている場合はそれを受け入れるようにそれを置くだろう、そうでなければ、私は何をしたかを示すためにこのスレッドを更新します。ありがとう! – Jeremie

1

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

これはまだ正規化されていません。 3つのテーブルのplace値のセットが互いに素であることを確認する作業を行う必要があります。また、適切な表にitemを参加させるためにもっと多くの作業が必要です。 (本質的に、あなたは別の困難の1つのセットを交換します。)

0

あなたの考えを教えてください。

「項目」のフィールドはオプションとなり、各国間の関係は、&都市を述べていることがすでに定義されている、多分私はそのように試みることができるので:

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

次に、このユニークなIDを「アイテム」テーブルに入れて、テーブルにどこを探すかを指定する「タイプ」(「都市」、「州」、「国」)を追加することができます。

いくつかの変更(例: 'regions'、 'continents'など)がある可能性があるため、アソシエイティブテーブルを再生成する代わりに、単に新しいテーブルとタイプを追加するほうがよいでしょう。

意味がありますか?

ありがとうございます!

関連する問題