Где в базе данных Postgresql, где у продавца много товаров, а у товаров много продавцов, где должны храниться цены? - PullRequest
0 голосов
/ 28 декабря 2018

Используя django и python, я создаю веб-приложение, которое отслеживает цены.Пользователь является производителем и хочет получать отчеты.Каждый из их продуктов имеет рекомендованную цену.Каждый продукт может иметь более одного продавца, и каждый продавец может иметь более одного продукта.У меня вопрос, где мне хранить цены, особенно цены продавца?Сейчас у меня есть схема базы данных, поэтому в таблице продуктов хранится рекомендуемая цена и цена продавца, а это означает, что один и тот же продукт повторяется много раз.Есть ли лучший способ сделать это?

DB Schema

В соответствии с приведенными ниже рекомендациями это правильная схема БД: enter image description here

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Это вопрос хранилища данных.

Я бы рекомендовал указывать цены для факта как меры и иметь только атрибуты в измерениях.

измерения:

  • Продукт
  • Продавец
  • Производитель

Факт (столбцы):

  • Список позиций
  • Цена продавца
  • Элемент списка
  • MRSP
  • Код товара
  • Идентификатор продавца
  • Идентификатор производителя
  • Отметка времени
0 голосов
/ 28 декабря 2018

Поскольку у вас есть случай «многие ко многим», ваша структура будет использовать таблицу ссылок.У вас будут таблицы seller, product и link_seller_product.Последняя таблица имеет ссылку на таблицу seller через идентификатор, а также таблицу product через идентификатор.Поэтому в этой таблице также может содержаться любая информация, которая зависит от продавца и продукта и не является фиксированной ни для одного из них.Таким образом, цена за товар за продавца идет туда.

Поэтому добавьте дополнительную таблицу ссылок со столбцами sellerid, productid и price, и у вас будут только отдельные строки в продавцах и продуктах, но у каждого продавца может быть своя собственная цена для продукта.

0 голосов
/ 28 декабря 2018

Вы недостаточно адекватно представляете отношения «один ко многим» между продуктами и продавцами.В вашем табле продукта есть seller_id и seller_price, но если один товар продается многими продавцами, он не может.

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

CREATE TABLE seller_products (
   seller_id integer,
   product_id integer,
   price decimal 
);

Я оставлю индексы внешних ключей и т. Д.вы.Идентификатор продавца и идентификатор продукта могут представлять собой уникальную комбинацию (исторические данные лучше всего удалять из активных наборов данных для увеличения срока службы), но, конечно, любой данный продукт будет указан один раз для каждого продавца, который его продает, и каждый данный продавец будет указан один раз для каждого продукта.он продает (вместе с его уникальной ценой).

Затем вы можете присоединить таблицу к продуктам, чтобы получить данные, которые вы в настоящий момент храните денормализованными в таблице products:

SELECT * 
FROM products
LEFT JOIN seller_products ON ( seller_products.product_id = products.id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...