Подтвердить что ты не робот

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

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

Обследование имеет и относится ко многим Вопросам и относится ко многим Ответим.

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

Стандартная реализация M2M будет использовать две таблицы соединений surveys_questions и questions_answers. Вместо этого я подумываю о том, чтобы использовать массивы Integer 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 с типом массива с порядком элементов массива, как реализовать?

4b9b3361

Ответ 1

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