Каким образом хранить данные в базе postgresql

Рейтинг: 0Ответов: 1Опубликовано: 14.04.2023

Всем привет! Пишу web-приложение на Node JS по созданию заявок на приобретение ПО.

В заявке может быть указано несколько позиций приобретаемого ПО.

Возник вопрос: в каком виде закидывать данные по каждой позиции заявки в базу, чтобы спокойно по id заявки можно было получать все позиции?

Думал хранить в таблице, где у поля тип данных json, ну и, соответственно, хранить все данные в этом формате, но потом подумал, что могут в дальнейшем возникнуть проблемы с выборкой данных из json.

Ответы

▲ 1Принят

Только вы можете знать какие именно задачи вы решаете и какие данные вам нужно хранить. А главное как потом их использовать.

Если это просто список заявок и потом не потребуется каких-то отчетов или подсчета аналитики - то можно хранить данные и в JSON внутри поля записи о заявке. Современные версии PostgreSQL имеют довольно хорошие возможности работы с такими JSON полями.

Если же есть прогнозы что в дальнейшем нужно будет собирать каку-то статистику из разряда "дайте нам три товара, которые больше всего покупали в третьем квартале прошлого года" и т.п - то лучше сразу хранить данные в таблицах и использовать связи между таблицами.

Самый простой вариант для вашего случая - это три таблицы.

  1. Таблица товаров - где есть описание каждого товара. И главное тут есть уникальный id определяющий запись в этой таблице.
  2. Таблица заявок - гже хранятся все данные по конкретной заявке. И соответственно есть id заявки
  3. Таблица для связи заявкок и товаров входящих в эту заявку. Т.е. здесь обязательно должны быть два поля - id заявки и id товара. Можно еще добавить поле "количество" - в котором будет задаваться количество товаров - если такое допустимо в вашей системе. Т.е. если в рамках одной заявки можно купить больше чем одну штуку какого-то товара. Если это не нужно, то и поле не нужно.

А дальше все просто. Когда в заявку добавляется товар, то в таблицу связи добавляется запись. Сколько товаров в заявке - столько записей в этой таблице у которых один и тот же id заявки, но разные id товаром.

Это если на пальцах. А более серьезно это можно почитать в любой статье про SQL для начинающих. Где пишется про нормализацию таблиц и про связи "одни-к-однуму", "один-ко-многим" и "многие-ко-многим".