2012-05-25 3 views
0

Я пытаюсь создать базу данных для строительного склада (там, где хранятся материалы для строительства). Мне нужно знать все хранящиеся материалы (продукты), все проданные продукты и все оставшиеся продукты. Подумываю сделать так:Борьба с БД дизайн/связь


Products--> Deliver <--Depot (many to many) - here I see all the products in. 

Depot--> Sell <--Products (many to many) - here I see what I have sold. 

And what is left: To make a difference between "Deliver" and "Sell". 

Есть ли что-то правильно здесь? У вас есть другая идея? Спасибо за помощь.

ответ

2

Другой способ обработки системы отслеживания запасов - это подойти к нему как к с двойной регистрацией. Это позволит вам объединить ваши таблицы Deliver и Sell в инвентарь Movement стол. Каждое движение будет состоять из двух записей: с положительным числом и с отрицательным количеством.

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


EDIT: Таблица структуры ...

PRODUCT 
-ID (PK) 
-Description 
-... 

DEPOT 
-ID (PK) 
-Name 
-Location 
-... 

MOVEMENT 
-ID (PK) 
-DateTime 
-ProductID (FK) 
-DepotID (FK) 
-Quantity /* Positive=Increase, Negative=Decrease */ 
-OffsettingMovementID (FK) /* Points to the other half of the entry */ 
+0

Итак, вы говорите, что я буду есть таблица Продукты, Депо и движение, и это будет многие ко многим продукт -> Движение <- Depot, и в таблице Movement у меня будут поля внешних ключей как Product, так и Depot и два столбца с именем In и Out. In-positive, Out-negative. Как это? –

+0

@MorarMihai - Я отредактировал свой ответ, чтобы включить образцы столбцов. Идея состоит не в том, чтобы иметь два столбца: _in_ и _out_. Идея состоит в том, что каждая транзакция имеет две записи, одна показывает движение (количество <0), а другая показывает движение в (количество> 0). Эти две половины транзакции могут быть связаны с инволюцией FK или с общим идентификационным номером транзакции, в зависимости от того, что вы предпочитаете. Получение позиции на складе для любого продукта в любом депо в любой момент становится прямым запросом SUM. –

+0

Спасибо, Джоэл, ты мне помог. –