@Badmajor

Как лучше хранить данные фиксированных таблиц в JSON или в отдельных полях?

СУБД - Sqlite c большим желанием перейти на PostgreSQL
База для вебприложения на Django 3.2
выводить буду все данные.

пример таблицы (сокращенно на 50%):
'Dimensions and Weight': {
'Length': '4595 mm', 
'Width': '1850 mm', 
'Width with mirrors': '2172 mm', 
'Height': '1660 mm', 
'Wheelbase': '2775 mm', 
'Weight Unladen (EU)': '1980 kg', 
}
  • Вопрос задан
  • 256 просмотров
Решения вопроса 1
dimonchik2013
@dimonchik2013
non progredi est regredi
в JSON хранятся неструктурированные данные, в таблицах - структурированные

далеко ходить не нужно: в вашем примере имена полей превышают значения в пропорции 12/6
сто записей дадут в таблице 606 элементов, в JSON - 1200 (элемент - условный байт / 8 символов)
то есть размер базы - в 2 раза
это мы еще не берем оптимизацию по типам данных, поиск, индексы, выборки по условию и т.п.: JSON очень затратная вещь

настолько затратная, что даже неструктурированные данные пытаются хранить в таблицах - забивая неизвестную часть null - в конце концов число параметров небесконечно

JSON хорошо подходит для некоторых предварительных данных - получаемых парсингом или - да да - по тому самому API, при условии их дальнейшей обработки и занесения в таблицы
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
mayton2019
@mayton2019
Bigdata Engineer
JSON хорошо подходит для хранения неспецифицированных данных. Например у вас есть таблица товаров.
У товара есть базовые свойства такие как цена, категория, название и производитель.
А есть описалово товара где например для ТВ-панели будет около 50 параметров таких как диагональ,
яркость матрицы, и прочая техническая чепуха. Вот эти 50 параметров можно положить в JSON (или JSONB)
для Postgres. Потому что в магазине всегда есть прецензиозные клиенты которым нужна посудомойка розового цвета и встраиваемая и еще ценой такой-то и такой-то. Вот спецом для них такая структура может быть создана.

Поэтому ответ тут может быть такой. Эти две техники не исключают друг друга. Вы можете использовать
классическую таблицу с полями и +дополнительно иметь сет неспецифицированных полей.
Ответ написан
Комментировать
@mvv-rus
Настоящий админ AD и ненастоящий программист
Касательно БД ответ зависит о того, что вы с этими данными, в основном, делать будете. Если просто выводить весь набор, без (или почти без) фильтрации, поиска и т.д. на бэке, то лучше хранить объекты в том виде, в котором они через API отдаваться будут, т.е. в JSON. Если активно будете пользоваться поиском и фильтрацией по свойствам объектов, то лучше хранить свойства объектов - по крайней мере, используемые для поиска фильтрации, а, возможно, и все - как отдельные поля БД. Остальные свойства при этом можно хранить и в JSON: современные БД, и, в частности, PostgreSQL, умеют с ним работать. Если ожидается что у разных объектов будет разный набор свойств, и по этому набору поиск/фильтрация не будет производиться (по крайней мере - часто), то таким свойствам совершенно точно место в JSON (или использовать альтернативный подходы, про которые пока писать не буду).
Короче, выбор тут конкретный, и, нередко - творческий.
Ответ написан
Комментировать
star52
@star52
Программист
По опыту - работать с JSON из SQL не супер легко.
Если у вас есть админка где данные будут правиться с использованием JS то
и храните все в JSON.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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