ほとんどの場合、一方からのみ関係にアクセスする多対多の関係をモデル化しています。これは階層に似ており、トップダウンでアクセスされ、その逆ではありません。
Surveyは、多くの Answer を持ち、それに属します。 Questionsは、多くのAnswerを持ち、それに属します。
両方の関係は多対多である必要があります。これは、同じ質問がさまざまな調査で再利用され、多くの質問で同じ回答が使用される可能性があるためです。これは要件です。
標準の M2M 実装では、2 つのジャンクション テーブルと を使用surveys_questions
しquestions_answers
ます。question_ids
代わりに、PostgreSQL の整数配列を使用して Survey とanswer_ids
Questionに格納することを考えています。
ANY 演算子を使用して、外部キー配列に一致するすべての行をクエリできます。
SQL を使用して、質問と質問の回答を含むすべての調査を照会するにはどうすればよいでしょうか?
外部キー配列で返される行の順序をどのように一致させることができますか? すなわち。question_ids = [1,2,3] を使用すると、1、2、3 の順序で質問行が返されることが保証されます。
ジャンクションテーブルと比較して、これはどのようにパフォーマンスを発揮しますか (適切なインデックスが何であれ)。
これを提案しますか?このような M2M のモデル化に関するリソースはありますか?
アップデート
配列外部キーの参照整合性を PostgreSQL 9.3 に追加する提案がありましたが、含まれませんでした: http://blog.2ndquadrant.com/postgresql-9-3-development-array-element-foreign-keys/
外部キー配列PostgreSQL JOIN を使用して順序を維持することについての SO 配列要素の順序を持つ配列型の JOIN についての質問、実装方法は?