25

我正在建模多对多关系,其中大部分时间仅从一侧访问该关系。它更像是一个层次结构,它是自上而下访问的,而不是相反。

调查有并且属于许多问题有并且属于许多答案

这两种关系必须是多对多的,因为同一个问题可以在不同的调查中重复使用,并且在许多问题中的答案相同。这是一个要求。

标准 M2M 实现将使用两个联结表,surveys_questions并且questions_answers. 相反,我正在考虑使用 PostgreSQL 的整数数组存储question_ids在 Survey 和answer_idsQuestion 中。

我们可以利用 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 维护顺序的问题,如何实现?

4

1 回答 1

7

使用联结表方法。数组方法不够标准,您必须询问它的工作量,而另一种是完全标准的。

于 2012-12-12T13:09:18.100 回答