Проектирование системы инвентаризации базы данных SQL - PullRequest
0 голосов
/ 05 июля 2018

Я перестраиваю текущее приложение для инвентаризации. И я ищу улучшения.

Текущая ситуация: У меня есть продукт, который можно хранить в нескольких местах (1 или во многих). Даже в одном месте может храниться несколько (разных) товаров.

Итак, у меня есть этот дизайн:

product:
 - id
 - description

location
 - id
 - name

stock:
 -id
 -product_id
 -location_id
 -amount

Вот чего я хочу. Но сейчас главный вопрос. Расчет общего запаса на продукт занимает много времени. У меня есть около 20 тысяч продуктов и 18 тысяч мест. Поэтому я подумал, что могу сохранить общий запас на столе продуктов. Это плохой подход?

Кроме того, я хочу сохранить информацию о том, откуда поступает товар и куда он доставлен. Поэтому я хочу сделать 2 таблицы для этого. Один для входящих и один для исходящих акций. Есть ли лучшее решение для этого?

1 Ответ

0 голосов
/ 05 июля 2018

Поэтому я подумал, что смогу сохранить общий запас на столе продуктов. Это плохой подход?

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

select sum(s.amount)
from stock s
where s.product_id = @product_id;

С индексом stock(product_id, amount) это должно иметь очень хорошую производительность.

Почему дублирование информации на уровне product плохо? Проблема в сохранении данных. Вы должны иметь триггеры для insert с, update с и delete с в таблице stock. Это громоздко для поддержания.

При некоторых обстоятельствах такой подход может быть необходим. Но имея всего 20 000 строк, вы сможете оптимизировать базу данных, не прибегая к триггерам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...