Хранение сериализованного массива в базе данных анти-шаблон? Рельсы

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

Объект имеет список связанных номеров.

Вероятно, потребуется проверить, имеет ли объект определенный номер.

Никогда не обновит.

Не будет запрашивать это.

Иметь номера свойств как сериализовать?

Имеются ли номера таблиц, принадлежащие объектам?

Кстати, я использую рельсы 5.1 и postgresql.

Спасибо


person aza    schedule 19.08.2017    source источник


Ответы (1)


Поскольку вы используете PostgreSQL, у вас фактически есть третий вариант: использовать столбец массива.

Добавьте параметр array: true при создании столбца:

t.integer :column_name, array: true

и тогда model.column_name будет массивом Ruby, и вы сможете использовать весь массив PostgreSQL операторы и функции для работы с массивом и запроса к нему.

Я склонен думать, что вам обычно лучше иметь отдельную таблицу, но столбец массива часто удобен и его довольно легко развернуть в отдельную таблицу, если это необходимо.

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

person mu is too short    schedule 19.08.2017
comment
Да, случайная подача. Спасибо. Я удалил свой ответ и удалю этот комментарий. - person Cary Swoveland; 29.08.2017