连接表与外键数组?

ran*_*guy 23 arrays postgresql many-to-many junction-table

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

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

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

标准M2M实现将使用两个连接表,surveys_questionsquestions_answers.相反,我正在考虑使用PostgreSQL的整数数组存储question_ids在Survey和answer_idsQuestion中.

我们可以利用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维护顺序的问题,数组类型与数组元素顺序,如何实现?

Dav*_*dge 7

使用联结表方法.数组方法非常标准,你必须询问它有多少工作,而另一个是完全标准的.

  • 但是,连接表可能比数组慢得多.请参阅https://gist.github.com/joevandyk/031cf5812bd656887623 (4认同)