私は多対多の関係をモデリングしています。関係はほとんどの場合、一方の側からのみアクセスされます。それは、トップダウンでアクセスされ、逆の方法ではなく、階層に似ています。ジャンクションテーブルと外部キー配列
調査があり、持っていると多くのに属し回答多くの質問に属します。
両方のリレーションシップは多対多でなければなりません。同じ質問を異なるアンケートで再利用したり、多くの質問で同じ回答を使用できるためです。これは要件です。
M2Mの標準実装では、2つの接合テーブルsurveys_questions
とquestions_answers
が使用されます。代わりに、PostgreSQLの整数配列を使用して、調査にquestion_ids
、質問にanswer_ids
を格納することを考えています。
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/
外部キー配列を使用して秩序を維持に関するSOの質問はPostgreSQL JOIN with array type with array elements order, how to implement?
あなたは多対多と言っていますが、これは1対多のように聞こえます。多くの場合、各調査はいくつかの質問に関連しており、各質問はいくつかの調査に関連していますが、少し奇妙に聞こえるのは確かです。 -Manyは通常「has-and-belong-to-many」と呼ばれます) – SingleNegationElimination
@TokenMacGuy:混乱して申し訳ありません。質問は調査を通してクロスラップし、多対多の関係を作る質問にも答えます。私はHABTMと多くの関係を持っています。 – randomguy