我正在建模多对多关系,其中大部分时间仅从一侧访问该关系。它更像是一个层次结构,它是自上而下访问的,而不是相反。
调查有并且属于许多问题有并且属于许多答案。
这两种关系必须是多对多的,因为同一个问题可以在不同的调查中重复使用,并且在许多问题中的答案相同。这是一个要求。
标准 M2M 实现将使用两个联结表,surveys_questions
并且questions_answers
. 相反,我正在考虑使用 PostgreSQL 的整数数组存储question_ids
在 Survey 和answer_ids
Question 中。
我们可以利用 ANY 运算符来查询与外键数组匹配的所有行。
我们将如何使用 SQL 查询所有带有问题和问题答案的调查?
我们如何将返回的行的顺序与外键数组匹配?IE。使用 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 维护顺序的问题,如何实现?