Администратор создает поля, указывая непосредственно их тип 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} |
То есть
в первом случае каждая запись содержит строковые данные и относится к конкретному полю,
во втором: данные к всем заполненным полям содержатся в одной записи
Какой способ предпочтительнее, если нужно учитывать скорость выборки данных по определенному полю?
Значение к этому полю может быть целочисленное или вещественное, что никак не позволяет осуществить правильно сортировку в первом методе, точнее оно будет сортироваться как строка