我正在建立多对多关系的模型,其中大多数时间仅从一侧访问该关系。它更像是一个层次结构,它是自上而下访问的,而不是相反的方式。
调查已经并且属于许多问题已经并且属于许多答案。
两种关系必须是多对多的,因为可以在不同的调查中重复使用相同的问题,并且在许多问题中可以使用相同的答案。这是一个要求。
标准的M2M实现将使用两个联结表surveys_questions
和questions_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/