我正在建模多对多关系,其中大部分时间只从一侧访问关系。它更像是一个层次结构,可以自上而下访问,而不是相反。
调查拥有并属于许多问题,并且属于许多答案。
这两种关系必须是多对多的,因为同一个问题可以在不同的调查中重复使用,并且在许多问题中都可以使用相同的答案。这是一项要求。
标准M2M实施将使用两个联结表surveys_questions
和questions_answers
。相反,我正在考虑使用PostgreSQL的整数数组来存储调查中的question_ids
和问题中的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?
维护订单的问题答案 0 :(得分:7)
使用联结表方法。数组方法非常标准,你不得不问问它有多少工作,而另一个是完全标准的。