Dúvidas sobre como estruturar corretamente um banco.
10/01/2019
0
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?
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?
Xcjh2rrd
Curtir tópico
+ 0
Responder
Post mais votado
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 :
Espero que o exemplo te ajude a estruturar algo bacana, boa sorte .
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 .
Jucélio Silva
Responder
Mais 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?
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?
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
Clique aqui para fazer login e interagir na Comunidade :)