[firebase-br] Composição de produtos, select recursivos e afins...

Lucas Zampar lucas.zampar em gmail.com
Ter Abr 28 12:42:51 -03 2009


Bom dia senhores,


Estou tentando resolver um problema há vários tinhas porém sem sucesso.
Na empresa em que trabalho, vendemos produtos que podem ser compostos 
ou  simplesmente comerciais.
O problema está sendo eu criar a árvore de relacionamento de produtos 
compostos.

Por exemplo:
Um HD é um produto tipo = "C", pois é comercial e não tem estrutura de 
composição.
Uma MEM RAM é um produto tipo = "C", pois é comercial e não tem 
estrutura de composição.
Um GABINETE é um produto tipo = "C", pois é comercial e não tem 
estrutura de composição.

Os produtos manufaturados são do tipo = "M", exemplo:

Já um COMPUTADOR MOD1 tem em sua composição:
1 HD
2 MEM RAM
1 GABINETE

Um COMPUTADOR MOD2 tem em sua composição:
2 HD
1 MEM RAM
1 GABINETE

Já um SERVIDOR tem sua composição:
1 COMPUDATOR MOD1
2 HD
2 MEM RAM

Observem que tenho de ter n níveis e adicionar vários produtos tanto 
comerciais, como compostos.
Sabendo que todos produtos compostos são feitos de comerciais...

Segue em anexo as DDL das minhas duas tabelas:

CREATE TABLE PRODUTO (
     CODIGO                INTEGER NOT NULL,
     TIPO                  VARCHAR(1),
     CODPRODUTO            VARCHAR(16),
     DESCRICAO             VARCHAR(255),
     QUANTIDADEATUAL       NUMERIC(6,2),
     QUANTIDADEMINIMA      NUMERIC(6,2),
     PESO                  NUMERIC(3,2),
     CUSTOCOMPRA           NUMERIC(9,3),
     CUSTOFINAL            NUMERIC(9,3),
     PRECOVENDA            NUMERIC(9,3),
     IPI                   NUMERIC(5,2),
     MARKUP                NUMERIC(5,2),
     MEDIDAS               VARCHAR(15),
     LOCALIZACAO           VARCHAR(4),
     OBS                   VARCHAR(255),
     DETALHAMENTOPROPOSTA  BLOB SUB_TYPE 1 SEGMENT SIZE 16384,
     FOTOS                 BLOB SUB_TYPE 1 SEGMENT SIZE 16384,
     UNIDADE               SMALLINT,
     GRUPO                 SMALLINT
);


Minha tabela de relacionamentos:

CREATE TABLE PRODUTOCOMPOSICAO (
     CODIGO                   INTEGER NOT NULL,
     CODIGOPRODUTO            INTEGER NOT NULL,
     CODIGOPRODUTOADICIONADO  INTEGER NOT NULL,
     QUANTIDADE               NUMERIC(9,3) NOT NULL
);


1) Aí pergunto a vocês, estão estruturadas corretamente as minhas tabelas?

2) Como fazer para que o custo final de um produto composto sempre se 
mantenha atualizado através dos custos dos componentes comerciais?

3) Como realizar um select que me mostre a raiz de todos os componentes 
que compõem um produto composto?
Ex:

Composição do Servidor
- 1 Computador MOD 1
-- 1 HD
-- 2 MEM RAM
-- GABINENTE
- 2 HD
- MEM HD

Atualmente tenho uma tabela que mantém o cadastro de produtos e outra 
que mantém o relacionamento entre eles.
O preço de venda dos produtos compostos são calculados toda vez que é 
alterada a estrutura da tabela de relacionamento através de um trigger.

Agradeceria muito quem pudesse me dar uma ajuda!

E desculpem pelo longo e-mail!


Atenciosamente,


Lucas Zampar Bernardi




Mais detalhes sobre a lista de discussão lista