2016-09-07 8 views
0

この質問には以前ヒープが尋ねられていましたが、Googleが理解できる方法でそれをどのように語るかわかりませんでした。複数のテーブルを接続するデータベース設計のベストプラクティス

基本的には、例えば次の3つのテーブルを持っている場合:

表B1

表B2

、すべて3つのテーブルからのデータのいずれか1 2の方法で接続されている表:

表A &表B1

OR

表の表に、なぜそれらを接続することがベストプラクティスとなり&表のB2

1テーブルなど:

結合テーブル

|Table A |Table B1 |Table B2 | 
    |tableA_ID|tableB1_ID|null  | 
    |tableA_ID|null  |tableB2_ID| 

またはそれぞれが

表Aに参加し、B1は

表Aに参加し、B2は

を接合するための2つの別々のテーブルを持っています

他にも良い方法がありますか?

+0

http://stackoverflow.com/questions/13749525/relational-database-design-multiple-user-types/13752304#13752304 –

+0

ウォルターさんに感謝しています。昨日、私は同じ結論に達しました。これは私の考えを明確にするのに役立ちます。私はこれを答えとしてどのように受け入れることができますか? – Suxorixorage

+0

これは、元の文脈で正しい答えとしてすでに受け入れられています。私はここで冗長な回答を掲示することに反対しました。 –

答えて

0

は、私はあなたが実際にleft join、2をしたいと思う:

select a.tableA_ID, b1.tableB1_ID, b2.tableB2_ID 
from a left join 
    b1 
    on a.tableA_ID = b1.tableA_ID left join 
    b2 
    on a.tableA_ID = b2.tableA_ID ; 
1

参加テーブルは、テーブルの中のフィールドとの関係に依存します。 また、あなたが探しているの出力に依存します - これに基づいて、あなたはそれはあなたが何をしようとして少しは不明だが、あなたの期待される結果を考えると、union allが働くかもしれないテーブル

0

に参加する必要があります。

select a.tableA_ID, 
     b.tableB1_ID as TableB1, 
     null as TableB2 
from a join b on a.tableA_ID = b.tableA_ID 
union all 
select a.tableA_ID, 
     null, 
     b2.tableB2_ID 
from a join b2 on a.tableA_ID = b2.tableA_ID 
関連する問題