• ベストアンサー

特定のフィールドを複数 Join するテーブル

SQLについて悩んでいます。 例えば personというテーブルに 個人情報があるとします。 別の service というテーブルでサービスを供給する人と 受ける人、両方を含んだテーブルを作ることは、正しい でしょうか? 例えば service テーブルで以下のような構成です。 id - int p_person - 外部キー(personテーブルのidを参照) d_person - 外部キー(personテーブルのidを参照) 僕はよくこうゆうテーブルを作りたくなりますが、 こういう考え方は正規化には反してないものの なんだかおかしいように思ってしまいます。 アドバイスなどいただけたら幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

person同士の関連を表現するテーブルを導出する事は、妥当だと思います。 ただ、例であげられているserviceをエンティティとして考えるなら、 > id - int > p_person - 外部キー(personテーブルのidを参照) > d_person - 外部キー(personテーブルのidを参照) ――だけのものだと、なんかアレな気がします。 現場次第ですが。

angband
質問者

お礼

アドバイスありがとうございます。 >――だけのものだと、なんかアレな気がします。 ちょっと抽象的すぎたでしょうか(汗;) プライマリーキーと 同一フィールドを指す外部キーが2つしか書いてませんが、 実際にはもっとたくさんのフィールドがあると思います。 こうゆうテーブルが妥当だというお考えを聞いて 心強く思います。

その他の回答 (1)

  • hide9048
  • ベストアンサー率42% (6/14)
回答No.2

状況にもよりますが、文脈から推察する限りではじゅうぶん妥当だと思いますよ。 サービスを供給する人と受ける人の関係が多対多であれば、それを関連付けるテーブルが必要です。 もしもこれが一対多の関係であれば、一方のテーブルから他方のテーブルを参照する形のほうがスマートでしょう。

angband
質問者

お礼

ありがとうございます。 「じゅうぶん妥当」と言っていただいて、かなり自信を 持つことができました。 この設計で進めてみたいと思います。

関連するQ&A