Каким образом хранить данные в базе postgresql
Всем привет! Пишу web-приложение на Node JS по созданию заявок на приобретение ПО.
В заявке может быть указано несколько позиций приобретаемого ПО.
Возник вопрос: в каком виде закидывать данные по каждой позиции заявки в базу, чтобы спокойно по id заявки можно было получать все позиции?
Думал хранить в таблице, где у поля тип данных json, ну и, соответственно, хранить все данные в этом формате, но потом подумал, что могут в дальнейшем возникнуть проблемы с выборкой данных из json.
Ответы (1 шт):
Только вы можете знать какие именно задачи вы решаете и какие данные вам нужно хранить. А главное как потом их использовать.
Если это просто список заявок и потом не потребуется каких-то отчетов или подсчета аналитики - то можно хранить данные и в JSON внутри поля записи о заявке. Современные версии PostgreSQL имеют довольно хорошие возможности работы с такими JSON полями.
Если же есть прогнозы что в дальнейшем нужно будет собирать каку-то статистику из разряда "дайте нам три товара, которые больше всего покупали в третьем квартале прошлого года" и т.п - то лучше сразу хранить данные в таблицах и использовать связи между таблицами.
Самый простой вариант для вашего случая - это три таблицы.
- Таблица товаров - где есть описание каждого товара. И главное тут есть уникальный id определяющий запись в этой таблице.
- Таблица заявок - гже хранятся все данные по конкретной заявке. И соответственно есть id заявки
- Таблица для связи заявкок и товаров входящих в эту заявку. Т.е. здесь обязательно должны быть два поля - id заявки и id товара. Можно еще добавить поле "количество" - в котором будет задаваться количество товаров - если такое допустимо в вашей системе. Т.е. если в рамках одной заявки можно купить больше чем одну штуку какого-то товара. Если это не нужно, то и поле не нужно.
А дальше все просто. Когда в заявку добавляется товар, то в таблицу связи добавляется запись. Сколько товаров в заявке - столько записей в этой таблице у которых один и тот же id заявки, но разные id товаром.
Это если на пальцах. А более серьезно это можно почитать в любой статье про SQL для начинающих. Где пишется про нормализацию таблиц и про связи "одни-к-однуму", "один-ко-многим" и "многие-ко-многим".