2011-01-21 10 views
0

第1オフ:同様の質問を見てきましたが、回答が見つかりませんでした。これがリピートであれば申し訳ありません。テーブル間の一意の識別子

私はMySQLにはかなり新しいです。

のは、私は3つのテーブルがあるとしましょう:住宅オフィスビル

これらの事のすべては窓を持っているので、私は同様にのWindowsテーブルを必要とするつもりです。

ここで、各ウィンドウは、上下または2重のペインまたは1つのペインなどになります。各ウィンドウには、一意のIDがあります。各ウィンドウには誰がオープンしているのか、誰がオープンしているのかを記録しておく必要があります。なぜなら、私は最初にWindowsテーブルが必要だと考えたからです。

質問:各ウィンドウにはparent_idが必要です。しかし、問題はXXのIDを持つ車と同じIDを持つオフィスビルと家があるときに発生します。ページが読み込まれたら、ウィンドウの配置場所を知るにはどうすればよいですか?

私はこの質問に多くの答えがあると仮定します...私は最良の方法を探しています。

P.S. Windows、車、住宅、オフィスビルはあくまで例示的なものです。私の実際のデータではありません。

答えて

2

だから、それぞれのウィンドウは、家、車、またはオフィスビルのいずれかに属していると言いますか?このために確立されたパターン「は、そのIDとともに関連するモデルの種類を格納する」ためだけの空想の単語である多型の関連付けである:

SELECT * FROM `windows` JOIN `cars` ON 
    (`windows`.`parent_model` = 'car' AND `windows`.`parent_id` = `cars`.`id`) 
    ... 
:これは容易に選択接合および問合せを可能

Table `windows` 
=============== 
id 
parent_id 
parent_model 
... 

window(1, 42, 'house', ...) 
window(2, 7, 'car', ...) 
... 

あなたはまた、(自動車/住宅/オフィス)

Table: window_mapping 
Columns: id (primary key/auto generated) 
     Window_id (not null, ref to Window table primary key) 
     Entity_id (not null, ref to car /house /office table primary key) 
     entity _def (text with values, Car/house /office) 

または1つ以上のテーブルのアプローチはになりますどのエンティティにマッピングされているウィンドウにマッピングするために、1つ以上のテーブルが必要になる場合があります

+0

だから私だけの店(parent_modelで)それはに関連テーブルの名前は?それがテーブルハウスの家であれば、parent_modelは 'houses'ですか? – Peter

+1

@Peter Yup、あなたはそれを持っています。 – deceze

+0

これが問題になりますか?クエリーが(何らかの理由で)家、車、または建物以外のparent_modelを指定した場合はどうでしょうか? SQLはこれを起こさないことをどのように知っていますか? – Peter

1
Table: window_mapping 
Columns: id (primary key/auto generated) 
     Window_id (not null, ref to Window table primary key) 
     house_id (not null, ref to house table primary key) 
     car_id (not null, ref to house table primary key) 
     office_id (not null, ref to house table primary key) 

私はあなたのusecaesを展開すると、私は助けることを試みることができ

かかわらず第1 'を好むより

+0

私は見ていると思う... window_mappingの仕事は、適切な場所にウィンドウを接続することです? – Peter

+0

はい、より良い正規化されたデータストレージを持っています – KK99

+0

これは基本的に多相多対多関連です。窓が複数の建物/車/家に属している場合、これは正しいことです。それが1対多の関連であっても、これは過剰です。 – deceze

関連する問題