Estou criando um controle de produtos de uma empresa, no qual
precisamos gerar códigos sequenciais para os produtos a medida que forem
cadastrados, vendemos produtos digitais, logo não tem quantidade
física. A princípio pensei em utilizar um campo de auto incremento,
porém temos outro problema: Vendemos os produtos por pacotes, ou seja,
necessitaria de várias baixas simultâneas, pois de 1 em 1 não faria
muito sentido ou levaria mais tempo.
Também ouvi falar sobre a função SEQUENCE (Presente no PostgreSQL e em mais alguns SGBDs)
Qual seria a melhor sugestão para um banco de dados?
O que vocês me sugerem?
E o que a baixa tem a ver com o cadastro ? São operações diferentes …
De fato são.
Mas estou com dúvidas em ambas.
O requisito é que cada unidade do produto tenha um código separado, pensei no mesmo ter um sufixo para facilitar na identificação e pensei em gerar esse código justo no cadastramento. Mas agora minha dúvida real é:
Como gerar vários códigos de uma vez? Vamos supor que quero entrar com 10 produtos e quero um código para cada um. Como eu geraria o mesmo sem ter de ser de 1 por 1?
Em relação a baixa/saída:
Como saio com esses 10 de uma vez, sem ter de dar saída de 1 por 1?
No banco de dados não tem jeito, as operações são sempre feitas uma por uma. É por isso que existe o conceito de transação em BD relacional, para você definir que um conjunto de operações são atômicas. Se existe o conceito de produto “pacote”, uma modelagem possível é você incluir um auto-relacionamento na tabela de produtos, de forma que os produtos que sejam parte de um pacote tenham a referência desse pacote. Por exemplo:
Produtos:
id | descricao | id_pacote
---|-----------|----------
1 | pacote | NULL
2 | produto1 | 1
3 | produto2 | 1
E na hora de fazer a baixa, você recupera os itens que fazem parte do pacote e faz a baixa. Inclusive, isso é necessário para emitir nota fiscal. Da próxima vez que você for ao McDonalds e pedir um combo, repare no cupom fiscal. Cada produto (sanduíche, refri, batata) tem que vir discriminado no cupom