Текущие версии Postgresql ввели различные функции для контента JSON, но я обеспокоен тем, действительно ли я должен их использовать. Я имею в виду, что пока еще нет "лучшей практики", которая работает, а что нет, или, по крайней мере, Я не могу найти его.
У меня есть конкретный пример. У меня есть таблица об объектах, которая, среди прочего, содержит список альтернативных имен для этого объекта. Все эти данные также будут включены в столбец JSON для поиска. Например (пропуская все остальные нерелевантные поля).
create table stuff (id serial primary key, data json);
insert into stuff(data) values('{"AltNames":["Name1","Name2","Name3"]}')
Мне понадобятся некоторые запросы в форме: "Перечислите все объекты, в которых один из имен alt" foobar "". Ожидаемый размер таблицы составляет порядка нескольких миллионов записей. Для этого могут использоваться запросы JSON Postgres, и он также может быть проиндексирован (Индекс для поиска элемента в массиве JSON). Однако СЛЕДУЕТ ли это делать так, или это извращенное обходное решение, которое не рекомендуется?
Классической альтернативой, конечно же, является добавление дополнительной таблицы для отношения "один ко многим", содержащего имя и внешний ключ в основной таблице; эффективность этого хорошо понятна. Однако у этого есть свои недостатки, так как тогда это означает дублирование данных между этой таблицей и JSON (с возможным риском целостности); или создание данных JSON динамически возвращают данные при каждом запросе, у которого есть собственное ограничение производительности.