Соединительные таблицы против массивов внешних ключей?

Я моделирую отношения "многие ко многим", когда к отношениям обращаются большую часть времени только с одной стороны. Это больше похоже на иерархию, доступ к которой осуществляется сверху вниз, а не наоборот.

Опрос имеет и принадлежит многим Вопросам, имеет и принадлежит многим Ответам.

Обе взаимосвязи должны быть "многие ко многим", потому что один и тот же вопрос можно повторно использовать в разных опросах и один и тот же ответ во многих вопросах. Это требование.

Стандартная реализация M2M будет использовать две соединительные таблицы, surveys_questions а также questions_answers, Вместо этого я думаю об использовании целочисленных массивов PostgreSQL для хранения question_ids в опросе и answer_ids обсуждаемый.

Мы можем использовать ЛЮБОЙ оператор для запроса всех строк, соответствующих массиву внешнего ключа.

Как мы будем запрашивать все опросы с их вопросами и ответами на вопросы с использованием 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 с типом массива с порядком элементов массива, как реализовать?

1 ответ

Используйте подход к соединительной таблице. Метод массива является достаточно нестандартным, поэтому вам нужно задавать вопросы о том, сколько он будет работать, тогда как другой является полностью стандартным.

Другие вопросы по тегам