#ruby-on-rails #postgresql #ruby-on-rails-4
#ruby-on-rails #postgresql #ruby-on-rails-4
Вопрос:
Мне любопытно использовать тип данных :array
в приложении Rails 4 с использованием базы данных Postgresql. Будет ли сохранен порядок добавления элементов в массив? Мой вариант использования следующий: Я хочу разрешить добавлять трех человек в качестве :collaborators
к Search
модели. Когда я возвращаю участников определенного поиска, я хочу всегда перечислять участников в том порядке, в котором они присоединились к поиску. Подходит ли для этого :array
тип данных или мне следует рассмотреть возможность использования :hstore
вместо этого?
Комментарии:
1. PostgreSQL имеет встроенную поддержку для столбцов массива , поэтому
array: true
материал в вашей миграции представляет собой реальный массив вплоть до конца, а не какой-то странный клад вродеserialize
. И вам, как правило, следует предпочестьjsonb
столбцыhstore
более гибким и, вероятно, лучшей постоянной поддержке. Но да, объединенная таблица сposition
столбцом, соответствующими ограничениями уникальности и FKS, как правило, лучше.2. Кроме того, PostgreSQL не разрешает (пока)
foreign keys
в массивах.
Ответ №1:
Тип данных массива сохраняет порядок, в то время как hstore, похоже, этого не гарантирует.
Но также, возможно, подумайте о добавлении надлежащего отношения collaborators, если вы хотите связать с другой таблицей.
Комментарии:
1. Да, я думаю, что таблица объединения — это правильный путь. Спасибо за ответ @art-solopov