Série da semana: eXtreme Programming na prática

Veja mais

Dúvidas sobre como estruturar corretamente um banco.

10/01/2019

10

SQL

Estou fazendo um projeto pessoal apenas para estudar e aperfeiçoar algumas coisas (utilizando NetBeans [java] com o SQL do Oracle ou MYSQL [estou na dúvida ainda]).
Tenho uma tabela de produtos, que no caso seriam pastéis e uma tabela de ingredientes.
Estes produtos, por padrão, não possuem estoque, apenas ingredientes. Estes ingredientes por sua vez, possuem o estoque deles.
Minha dúvida é: como devo estruturar este banco para possuir um controle do estoque dos ingredientes e da saída dos produtos finais? Faço uma relação N x N, ume relação 1 x N, crio uma trigger para checar se existe estoque do ingrediente antes de tentar 'vender' 1 pastel ou estes controle eu faço diretamente no meu programa, ao invés do banco?

Melhor post

10/01/2019

Bom dia Amigo,

A estrutura e controle de como as coisas acontecem depende muito do tipo da aplicação e o quanto conhece da tecnologia. Digamos que esta começando a programar em alguma linguagem mas você domina banco de dados, provavelmente vai definir o máximo possível de regra no banco e usar o sistema só como uma interface para as ações, da mesma forma se dominar uma linguagem mas não dominar banco vai preferir definir as regras no sistema e usar o banco apenas para manipular os dados.

Eu particularmente prefiro deixar exposto no código as regras de negocio , facilitando o trabalho em equipe , mas já tive casos de ter que colocar a regra no banco por questão de performasse.

Para o que está querendo fazer segue um exemplo bem simples de como estruturar o banco de dados, criei as entidade com poucos atributos para facilitar o entendimento, usei o banco Informix para montar a estrutura, logo pode ser que precise ajustar algo dependendo da sintaxe do banco que rodar os scripts :

select * from dev_produtos
select * from dev_necessidade
select * from dev_producao

drop table dev_produtos
drop table dev_necessidade
drop table dev_producao

// tabela com cadastros de produtos (Produtos podem ser Final 'Pastel' ou ingredientes 'Carne Seca, Cebola etc...')
create table dev_produtos (
cod_produto integer, // codigo do produto
den_produto varchar(70), // descrição do produto
tipo char(1), // tipo se é um Produto Final, um Ingrediente etc...
estoque integer, // quantidade do produto em estoque (Pode criar um controle de estoque separado com local de estoque etc.. mas para oe xemplo serve esse campo)
unidade_medida char(3), // unidade de medida do produto
primary key (cod_produto)  // chave da tabela
)

// tabela com as necessidade de produção de cada produto
create table dev_necessidade (
cod_produto integer, // codigo do produto a ser produzido
cod_ingrediente integer, // Ingredientes da produção do produto, uma regra aqui é que o ingrediente não pode ter o produto Final na composição "Geraria um loop"
qtde decimal(15,2), // quantidade necessária desse ingrediente para produzir o produto final
primary key (cod_produto,cod_ingrediente), // chaves
foreign key (cod_produto) references dev_produtos(cod_produto), // relacionamento com as outras tabelas
foreign key (cod_ingrediente) references dev_produtos(cod_produto) // relacionamento com as outras tabelas
)

// tabela para registrar a produção de um protudo
create table dev_producao (
id_producao integer, // id da solicitação de produção
cod_produto integer, // produto a ser produzido
quantidade integer, // quantidade de produtos a ser produzido
status  char(1), // status da produção
data_producao date, // data de produção
primary key (id_producao), // chave
foreign key (cod_produto) references dev_produtos(cod_produto) // relacionamento com as outras tabelas
)

// exemplo de ver os produtos necessaríos para produz algo
select p.cod_produto,p.den_produto,p.unidade_medida,p.estoque as quantidade_estoque ,n.qtde as quantidade_necessaria
  from dev_necessidade n
  join dev_produtos p on p.cod_produto = n.cod_ingrediente
  where n.cod_produto = 1




Espero que o exemplo te ajude a estruturar algo bacana, boa sorte .
Responder

Outros Posts

10/01/2019

Xcjh2rrd

Opa brother, já deu uma bela clareada!
Mas fiquei com uma dúvida quanto ao controle de saída dos produtos...
Situação: eu tento vender um pastel X, que possui o ingrediente Y. A checagem do estoque do ingrediente Y deve ser feita como? Por uma trigger que me dispara um erro caso não tenha estoque o suficiente para fazer o pastel X ou realizo o controle pelo meu programa?
Responder

10/01/2019

Jucélio Silva

Opa brother, já deu uma bela clareada!
Mas fiquei com uma dúvida quanto ao controle de saída dos produtos...
Situação: eu tento vender um pastel X, que possui o ingrediente Y. A checagem do estoque do ingrediente Y deve ser feita como? Por uma trigger que me dispara um erro caso não tenha estoque o suficiente para fazer o pastel X ou realizo o controle pelo meu programa?


Não precisaria de uma trigger para isso, é só você consultar seu estoque conforme a quantidade que vai produzir levando em conta a necessidade de cada produto, um exemplo :

Você vai fazer 10 pastei de carne seca.

Sabendo que para cada pastel desse produto a necessidade de carne seca de 0.1 "100 gm", você precisaria ter no estoque uma quantidade minima de 1Kg desse ingrediente, ai é só fazer um select da vida e ver se tem essa quantidade se não tiver o sistema informa que falta ingrediente para produzir essa quantidade desse produto ... Seria só questão de logica mesmo...

Responder