Ni55aN
@Ni55aN

Поиск по JSONB в Postgresql?

Администратор создает поля, указывая непосредственно их тип string, int и т.д. (это отдельная таблица Fields), но эти же поля пользователь должен заполнить данными, таким образом необходима таблица UserData, в которой данные могут быть представлены в двух вариантах:
id:int | value:string | field_id:int

или
id:int | data:jsonb


где ключом может быть ID поля

Fields
| id | type |
| 1 | integer |
| 2 | varchar |
| 3 | real |

UserData
| data |
| {1: 23, 2:"test string", 3: 45.56} |

То есть
в первом случае каждая запись содержит строковые данные и относится к конкретному полю,
во втором: данные к всем заполненным полям содержатся в одной записи

Какой способ предпочтительнее, если нужно учитывать скорость выборки данных по определенному полю?
Значение к этому полю может быть целочисленное или вещественное, что никак не позволяет осуществить правильно сортировку в первом методе, точнее оно будет сортироваться как строка
  • Вопрос задан
  • 364 просмотра
Пригласить эксперта
Ответы на вопрос 1
zoroda
@zoroda
Необычный Fullstack
Если правильно понял вашу задачу, выборка из одной таблицы по полю JSONB, проиндексированному GIN, оператором @> будет значительно быстрее, чем выборка из нескольких связанных таблиц (EAV модель).
Пруф
Ещё тут в комментариях к ответам почитайте
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы