Pergunta

Nosso layout atual de banco de dados para o inventário da loja inclui uma tabela que abriga um registro para cada item e inclui os atributos do item, como preço, custo, descrição, sku, etc. Cada loja possui uma tabela que possui o SKU e a quantidade e uma quantidade e um Poucos outros atributos que são diferentes para cada loja, dependendo do SKU.

Embora isso seja melhor do que ter uma coluna para a quantidade de cada loja na tabela de itens, parece que isso também é uma solução um tanto feia como quando uma nova loja é adicionada, você precisa selecionar em uma nova tabela e quando um novo item é adicionado , você deve inserir não apenas a tabela de itens, mas cada mesa de loja individual.

Existe uma maneira melhor de fazer isso do que como estou vendo? Parece que existe.

Foi útil?

Solução

Por que não ter uma tabela de estoque com SKU, níveis de loja e estoque?

por exemplo

Sku    | StoreId   | StockLevel
1234   | 001       | 15
1235   | 001       | 16
1234   | 002       | 8
1235   | 002       | 0

Portanto, a loja 002 está fora de estoque da SKU 1235, mas a loja 001 tem bastante. Este layout da tabela também permite que você obtenha uma visão em todo o grupo de seus níveis de estoque em uma única tabela usando algo como

select sku, sum(StockLevel) from stock group by sku

Outras dicas

Seguindo as regras de normalização dos dados, você deseja criar uma tabela como esta:

store_id | sku    | quantity | other_attributes ... 
---------+--------+----------+---------------------
    1000 | 129832 |      234 |                  ...
    1000 | 129833 |      334 |                  ...
    1000 | 129834 |       23 |                  ...
    1001 | 129832 |        0 |                  ...
    1001 | 129833 |       12 |                  ...
    1001 | 129834 |       10 |                  ...
    ...

Essencialmente, é uma tabela store_inventory. Dessa forma, você pode se filtrar para uma determinada loja dizendo

WHERE store_id = 1000 

etc ...

Você realmente quer três mesas, tanto quanto eu posso ver:

produtos

ProductID
Price
Description
...

StoreProduct

ProductID
StoreID
Quantity
...

Armazenar

StoreID
Address
...

Esse é um design de banco de dados perfeitamente válido e normalizado e soa basicamente o que você tem agora.

Parece que começou no caminho certo com uma tabela para todos os atributos comuns do item.

Em vez de ter uma tabela individual para cada loja, as contagens de inventário para todas as lojas devem estar em uma única tabela adicional, usando a chave do item e a chave da loja como uma chave primária combinada nessa tabela.

Por exemplo

Itens

Itemkey
Nome
Preço
Sku

Lojas

Storekey
Nome
Endereço

Inventário

Storekey
Itemkey
Quantidade

Usar o StoreKey e o Itemkey juntos na tabela de inventário manterá seus registros únicos.

Isso permitirá que você não apenas procure facilmente o item único, mas também procure coisas como:
Quantidade de todos os itens em uma loja pela loja
Quantidade de um item em todas as lojas pelo itemkey
Quais itens são baixos em todas as lojas por quantidade
etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top