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

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

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

标准的M2M实现将使用两个联结表surveys_questionsquestions_answers。相反,我正在考虑使用PostgreSQL的整数数组在Survey中存储question_ids,在Question中存储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/

关于使用外键数组PostgreSQL JOIN with array type with array elements order, how to implement?维护顺序的问题

最佳答案

使用联结表方法。数组方法是非标准的,您必须询问有关它可以工作多少的问题,而另一种方法是完全标准的。

关于arrays - 连接表与外键数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13839498/

10-11 22:08
查看更多