Esta Tabela Esta Correta?

Firebird

05/02/2006

Uso o InterBase e gostaria de saber se a forma que eu fiz a tabela a baixo esta correta...

O cliente poderá fazer a compra de até 10 produtos... o sistema verifica se o PROD01_PEDIDO não está vazio e grava como sendo o primeiro produto comprado... e assim por diante... Se essa não é a forma correta
de se fazer...

poderiam me dizer a melhor forma de montar esta tabela... para depois poder trabalhar da melhor forma com Delphi 7...


CREATE TABLE TAB_PEDIDO (
COD_PEDIDO INTEGER NOT NULL,
MESA_PEDIDO CHAR(10),
VENDEDOR_PEDIDO VARCHAR(15),
CLIENTE_PEDIDO VARCHAR(30),
PROD01_PEDIDO VARCHAR(20),
QTD_PROD01_PEDIDO NUMERIC(15,2),
VLR_PROD01_PEDIDO NUMERIC(15,2),
PROD02_PEDIDO VARCHAR(20),
QTD_PROD02_PEDIDO NUMERIC(15,2),
VLR_PROD02_PEDIDO NUMERIC(15,2),
PROD03_PEDIDO VARCHAR(20),
QTD_PROD03_PEDIDO NUMERIC(15,2),
VLR_PROD3_PEDIDO NUMERIC(15,2),
PROD04_PEDIDO VARCHAR(20),
QTD_PROD04_PEDIDO NUMERIC(15,2),
VLR_PROD04_PEDIDO TIME,
PROD05_PEDIDO VARCHAR(20),
QTD_PROD05_PEDIDO NUMERIC(15,2),
VLR_PROD05_PEDIDO NUMERIC(15,2),
PROD06_PEDIDO VARCHAR(20),
QTD_PROD06_PEDIDO NUMERIC(15,2),
VLR_PROD06_PEDIDO NUMERIC(15,2),
PROD07_PEDIDO VARCHAR(20),
QTD_PROD07_PEDIDO NUMERIC(15,2),
VLR_PROD07_PEDIDO NUMERIC(15,2),
PROD08_PEDIDO VARCHAR(20),
QTD_PROD08_PEDIDO NUMERIC(15,2),
VLR_PROD08_PEDIDO NUMERIC(15,2),
PROD09_PEDIDO VARCHAR(20),
QTD_PROD09_PEDIDO NUMERIC(15,2),
VLR_PROD09_PEDIDO NUMERIC(15,2),
PROD10_PEDIDO VARCHAR(20),
QTD_PROD10_PEDIDO NUMERIC(15,2),
VLR_PROD10_PEDIDO NUMERIC(15,2)
);

obrigado a todos!!!


Adelor Silva

Adelor Silva

Curtidas 0

Respostas

Edilcimar

Edilcimar

05/02/2006

vc não deve trabalhar desta maneira faça o seguinte
Crie uma tabela de Clientes, Produtos e Vendas.
Quando for vender coloque na tabela de vendas o código do cliente, o código do produto, e outros campos que achar necessário, aí então a cada produto comprado vc dá um append para ir acrescentando, assim o cliente pode comprar 1 ou 1000 produtos que tudo funciona direito


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

05/02/2006

Colega,

Pode funcionar da forma que você está fazendo, porém, não é uma boa prática de modelagem de dados. Você deve normalizar os dados e definir a integridade referencial.
No seu caso, apesar de eu ter usado uma simplicação das tabelas que considero ´envolvidas´ no processo de pedidos, sua modelagem deverá se assemelhar com:

create table CLIENTES (
CLI_ID               INTEGER                        not null,
CLI_NOME             VARCHAR(50),
constraint PK_CLIENTES primary key (CLI_ID)
);

create table PRODUTOS (
PRO_ID               INTEGER                        not null,
PRO_DESCRICAO        VARCHAR(50),
PRO_UNITARIO         NUMERIC(15,2),
constraint PK_PRODUTOS primary key (PRO_ID)
);

create table VENDEDORES (
VEN_ID               INTEGER                        not null,
VEN_NOME             VARCHAR(50),
constraint PK_VENDEDORES primary key (VEN_ID)
);

create table PEDIDOS (
PED_ID               INTEGER                        not null,
CLI_ID               INTEGER,
VEN_ID               INTEGER,
PED_DATA             DATE,
constraint PK_PEDIDOS primary key (PED_ID),
constraint FK_PEDIDOS_RELATIONS_CLIENTES foreign key (CLI_ID)
      references CLIENTES (CLI_ID),
constraint FK_PEDIDOS_RELATIONS_VENDEDOR foreign key (VEN_ID)
      references VENDEDORES (VEN_ID)
);

create table ITENS (
PEDI_ID              INTEGER                        not null,
PRO_ID               INTEGER,
PED_ID               INTEGER,
PEDI_QTDE            NUMERIC(10,3),
constraint PK_ITENS primary key (PEDI_ID),
constraint FK_ITENS_RELATIONS_PEDIDOS foreign key (PED_ID)
      references PEDIDOS (PED_ID),
constraint FK_ITENS_RELATIONS_PRODUTOS foreign key (PRO_ID)
      references PRODUTOS (PRO_ID)
);




GOSTEI 0
Adelor Silva

Adelor Silva

05/02/2006

create table ITENS (
PEDI_ID INTEGER not null,
PRO_ID INTEGER,
PED_ID INTEGER,
PEDI_QTDE NUMERIC(10,3),
constraint PK_ITENS primary key (PEDI_ID),
constraint FK_ITENS_RELATIONS_PEDIDOS foreign key (PED_ID)
references PEDIDOS (PED_ID),
constraint FK_ITENS_RELATIONS_PRODUTOS foreign key (PRO_ID)
references PRODUTOS (PRO_ID)
);

A minha dúvida é justamente neste ponto... Quando eu incluo um produto no pedido ele vai ser incluido no ´PRO_ID´... e os demais produtos... como eles são armazenados... não é necessário ter ´PROD_01, PROD_02´

É justamente isso que eu não entendo, onde fica armazenado

[color=red:70abe5dd2e]´aí então a cada produto comprado vc dá um append para ir acrescentando, assim o cliente pode comprar 1 ou 1000 produtos que tudo funciona direito´[/color:70abe5dd2e] os produtos acrescentados.... são armazenados onde...?

Desculpa minha ignorância, mas isso é muito importante para meu aprendizado... Agradeço a ajuda...


GOSTEI 0
Edilcimar

Edilcimar

05/02/2006

veja estas tabelas
codprod produto
1 Produto1
2 Produto2
3 Produto3

codcli cliente
1 Cliente1
2 Cliente2

agora a venda de 2 produtos para o cliente 2
codprod codcli quantidade data
1 2 5 06/02/2006
2 2 1 06/02/2006

Esta parte da venda vc faz com um append, ou seja a cada produto vendido é criado um novo registro


GOSTEI 0
Adelor Silva

Adelor Silva

05/02/2006

ok... vou fazer uns testes... acredito ter entendido...

logo peço ajuda em Notas Fiscais...

valew minha gente... obrigado...


GOSTEI 0
POSTAR