我正在建模多对多关系,其中大部分时间从一侧访问关系。它更像是一个层次结构,从上到下访问而不是反过来。
Survey有并且属于许多Questions,Questions有并且属于许多Answers。
两个关系都必须是多对多的,因为同一个问题可以在不同的调查中重复使用,同样的答案可以在多个问题中使用。这是一个要求。
标准的M2M实现将使用两个连接表,surveys_questions
和questions_answers
。相反,我正在考虑使用PostgreSQL的整数数组存储Survey中的question_ids
和Question中的answer_ids
。
我们可以利用ANY运算符查询与外键数组匹配的所有行。
如何使用SQL查询所有具有其问题和问题答案的调查?
如何将返回的行的顺序与外键数组匹配? 即使用question_ids = [1,2,3]可以保证返回顺序为1、2、3的问题行。
与连接表相比,性能如何(假设有适当的索引,无论它们是什么)?
您会建议这样做吗? 有关于如何建模多对多关系的资源吗?
更新
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?