Проектирование базы данных (Инвентаризация БД) - PullRequest
2 голосов
/ 08 июля 2011

Я планирую создать базу данных инвентаризации, которая отслеживает закусочную.Поскольку это будет доступ одного человека / компьютера и его легко можно будет перенести в другую систему, я планирую использовать SQLite в качестве механизма БД.Основная концепция состоит в том, чтобы отслеживать инвентарь, купленный на оптовом складе, таком как Sams Club, и затем отслеживать инвентарь.

Основное препятствие, которое я пытаюсь преодолеть, - это как отслеживать объемные и отдельные предметы вбаза данных продуктов.Например, если приобретен оптовый товар, скажем, 24 упаковки кокса, как я могу вести его в базе данных товаров, массовый товар и что он содержит 24 отдельных товара.Решение было бы довольно простым, если бы все оптовые товары содержали только несколько единиц товара, но в разнообразных упаковках, таких как картонная упаковка с пятью отдельными предметами с отдельными UPC, решение становится немного сложнее.

До сих пор я придумал подход с несколькими проходами, при котором БД сканировалась бы несколько раз, чтобы получить всю информацию.

Product_Table
SKU: INT
Name: TEXT
Brand: TEXT
PurchasePrice: REAL
UPC: BIGINT
DESC: TEXT
BULK: BOOLEAN
BulkList: TEXT // comma separated list of SKUs for each individual item
BulkQty: TEXT // comma separated list corresponding to each SKU above representing the quantity

Transaction_Table
SKU: INT
Qty: INT
// Other stuff but that is the essential

Когда я добавляю массовый товар в инвентарь (ПоложительныйКоличество транзакций), вместо этого он должен добавить все свои отдельные позиции, так как я не могу думать о том, когда у меня будет запас, чтобы продать оптовый товар.Тем не менее, я хотел бы сохранить массовые предметы в базе данных, чтобы облегчить их получение и добавление в инвентарь.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Один из способов сделать это - создать отображение 1: N между объемными объектами и их содержимым:

create table bulk_item (
  bulk_product_id integer not null,
  item_product_id integer not null,
  qty integer not null,
  primary key(bulk_product_id, item_product_id),
  foreign key(bulk_product_id) references product(sku),
  foreign key(item_product_id) references product(sku)
);

Список через запятую, конечно, хорошо (это может затруднить выполнение некоторых запросов, таких как поиск всех массовых объектов, содержащих этот SKU и т. Д.).

1 голос
/ 08 июля 2011

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

Дизайн, предложенный jspcal, обычно называется " Спецификация " и является единственным разумным способом решения такой проблемы, как композитные продукты.

Чтобы эффективно использовать это с таблицей транзакций, вы должны включить код типа транзакции вместе с SKU и количеством. Существуют разные причины, по которым ваши акции в любом данном SKU могут увеличиваться или уменьшаться Чаще всего получают новые акции, а клиенты покупают акции. Однако есть и другие вещи, такие как ручная корректировка инвентаря, чтобы учесть технические ошибки и усадку. Существуют также конверсии акций, например, когда вы решаете разбить пакет разнообразия на отдельные продукты для продажи. Не думайте, что вы можете рассчитывать на то, является ли количество положительным или отрицательным, чтобы дать вам достаточно информации, чтобы понять ваши уровни запасов и то, как (и почему) они изменились.

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