Gravar produtos vendidos

7 respostas
EDIMIL

Pessoal boa noite, estou tendo um problema em gravar no banco os produtos de uma venda, é o seguinte, tenho um tabela venda_cabeçalho, uma venda_detalhe e uma produtos, na tabela venda_detalhe as pks são formadas pelas pks de venda_cabeçalho(venda_cod) e produtos(prod_cod), quando vou gravar os produtos na venda_detalhe, gera o erro de integridade devido a duplicidade do codigo da venda(venda_cod) que será repetido nas linhas referentes aos produtos. Como posso gravar esses dados na venda_detalhe sem dar essa restrição?

7 Respostas

M

Não existem PKs (no plural) em uma tabela o que existe é uma PK, no seu caso composta que será venda_cod e prod_cod se só uma ou outra for a PK vai dar problema mesmo, e outra coisa nessa tabela venda_detalhe você precisa de pelo menos mais um atributo que é a quantidade a menos que o cliente possa comprar apenas um de cada produto por compra.

EDIMIL

Ainda tenho mais 3 atributos (qtd, vlUnit, vltotal), markin1 como devo criar então esta tabela venda_detalhe para poder inserir o cod_venda e o cod_produto, sem dar duplicidade de chaves, deveria ficar assim na tabela:

cod_venda  -   cod_produto - qtd - vlUnit - vlTotal
      1               2       4     2.5      10.0
      1               3       2     1.5       3.0
      1               6       1     3.0       3.0
      2               1       1     2.0       2.0
      2               2       2     2.5       5.0

acho que eu poderia tirar o vlUnit, e buscá-lo na tabela produto duranta a consulta, vc concorda?

M

Eu acho melhor vc deixar o valor unitário também na tabela detalhe porque pode ser que os produtos vendidos hoje mudem de preço amanhã e você não pode cobrar o que foi vendido hoje no preço de amanhã.

Entendeu?

EDIMIL

markin1:
Eu acho melhor vc deixar o valor unitário também na tabela detalhe porque pode ser que os produtos vendidos hoje mudem de preço amanhã e você não pode cobrar o que foi vendido hoje no preço de amanhã.

Entendeu?

Isso mesmo, entendi, markin1 e como devo criar esta tabela…

M

como assim?

cod_venda e cod_produto como PK composta e o resto dos atributos.

EDIMIL

markin1:
como assim?

cod_venda e cod_produto como PK composta e o resto dos atributos.

Mas ela já está composta, veja:

/*==============================================================*/
/* Table: VENDADET                                              */
/*==============================================================*/
create table VENDADET 
(
   VENDA_COD            int                            not null,
   PROD_COD             int                            not null,
   VENDA_DET_QTD        int,
   VENDA_DET_VL_UNIT    double,
   VENDA_DET_VL_TOTAL   double,
   constraint PK_VENDADET primary key clustered (VENDA_COD, PROD_COD)
);

e o INSERT está sendo feito assim:

"insert into vendaDet (venda_cod,prod_cod,venda_det_qtd,"
            + "venda_det_vl_unit,venda_det_vl_total) values (?,?,?,?,?)";

está certo?

EDIMIL

markin1 agradeço sua ajuda, meu erro foi no algorítmo para inserir no banco, estava repetindo o código do produto, obrigado.

Criado 30 de março de 2010
Ultima resposta 30 de mar. de 2010
Respostas 7
Participantes 2