2011-01-20 7 views
0

私はRailsを使用していますが、この質問はデータベース設計の詳細です。私は私のデータベースにいくつかのエンティティを持っていますが、スキーマはこのように少しあります:http://fishwebby.posterous.com/40423840他のテーブルを使って2つのテーブルをリンクするデータベーススキーマを設計する方法

人のリストを取得して姓で注文したいのですが、問題ありません。このものの

SELECT group_enrolment.*, person.* 
FROM person INNER JOIN member ON person.id = member.person_id 
INNER JOIN enrolment ON member.id = enrolment.member_id 
INNER JOIN group_enrolment ON enrolment.id = group_enrolment.enrolment_id 
WHERE group_enrolment.id = 123 
ORDER BY person.surname; 

:私は特定のグループに登録姓が注文した人のリストを、取得したい場合は、私は、いくつかは、4つのテーブル間で結合し、このようなものを含むSQLステートメントを使用する必要があります私のスキーマが成長するにつれて、これらのクエリはますます複雑になる可能性があります。

別のオプションは、他のテーブルでPERSON_IDを含むことにより、クエリ内の他のすべてのテーブルに人のテーブルに参加することができ、それはただ1つの参加、例えば

SELECT group_enrolment.*, person.* 
FROM person INNER JOIN group_enrolment ON group_enrolment.person_id 
WHERE group_enrolment.id = 123 
ORDER BY person.surname; 

しかし、これは希望になります私のスキーマでは、personテーブルが他の多くのテーブルに結合されていることを意味します。複雑なスキーマダイアグラムを除いて、誰もこれに不利な点を見ていますか?

私は今何をやっているのか(多くのテーブルに参加している)、あるいは私には起こっていない2番目の解決策や別の解決策が最善の方法であるかどうか、非常に感謝します。

事前に感謝多くのありがとうございます

答えて

3

さて、ジョインはデータベースの機能です。言われているように、モデル内の自然キーを伝播することを検討すると、ジョインでいくつかのテーブルをスキップすることができます。 this exampleを見てください。

EDIT私はこれがあなたのモデル(問題が)一致しますが、楽しみのためだけに、このようなものに類似したクエリを尽くすことは言わないよ

alt text

+0

を私が行ってきました私が好きなように外部キーを伝播させる方法については、結合が正常に機能しますが、スキーマを深く理解するにつれて、より複雑になっていきます。私はいくつかの成功したテストを今行ってきました。それは素晴らしいです - 私は子モデルが保存される前に外部キーを伝播する私のRailsモデルでコールバックを持っています、それは(例えば登録のための) 1つの結合。ご回答どうもありがとうございました! –

関連する問題