[firebase-br] Identificador para tabelas

Edson T. Marques marques em oriontec.com.br
Ter Maio 3 16:16:23 -03 2005


Ok!

Sem querer ser chato... e já sendo, vamos a um exemplo prático.

Meu banco de dados possui uma tabela de produtos com 70 campos. Essa 
tabela de produtos se relaciona com 10 outras tabelas:
Grupos, SubGrupos, Classificações1, Classificações2, Classificações3, 
Classificações4, Fabricantes, Unidades, CategoriasDimensionais e 
ClassificaçãoFiscal.
Em cada uma dessas tabelas existe uma chave primária que tem um 
relacionamento com a tabela de produtos e existe outro campo VARCHAR com 
a descrição.
A tabela de produtos, portanto, possui um índice de fk para cada chave 
do relacionamento.

Atualmente, então, minha tabela de produtos possui os 70 campos que 
falei mais 10 campos com as chaves das tabelas com que se relaciona. 
Alem disso mais 10 campos calculados com select (daquele jeito) para me 
dar as descrições dos registros das tabelas com as quais a tabela de 
produto se relaciona.

Assim:

CREATE TABLE PRODUTO (
   CHAVEPRO INTEGER NOT NULL,
   CHAVEGRU CHAR(3), 
   CHAVESGR CHAR(3),
   CHAVECL1 CHAR(3),
   CHAVECL2 CHAR(3),
   CHAVECL3 CHAR(3),
   CHAVECL4 CHAR(3),
   CHAVEFAB CHAR(3),
   CHAVECDI NUMERIC(2,0) DEFAULT 0,
   CHAVECLF VARCHAR(2),
   UNIDADE VARCHAR(3) NOT NULL,
   REFERENCIA VARCHAR(15),
   NOME VARCHAR(50) NOT NULL COLLATE WIN_PTBR,
   NOMEECF VARCHAR(30),
   COMPLEMENTO VARCHAR(256),
   COR VARCHAR(10),
...

  FABRICANTE COMPUTED BY ((select Nome from Fabricante F where 
F.ChaveFab = Produto.ChaveFab)),
  GRUPO COMPUTED BY ((select Nome from Grupo G where G.ChaveGru = 
Produto.ChaveGru)),
  SUBGRUPO COMPUTED BY ((select Nome from SubGrupo S where S.ChaveSGr = 
Produto.ChaveSGr)),
  CLASSIFIC1 COMPUTED BY ((select Nome from Classific1 C where 
C.ChaveCl1 = Produto.ChaveCl1)),
  CLASSIFIC2 COMPUTED BY ((select Nome from Classific2 C where 
C.ChaveCl2 = Produto.ChaveCl2)),
  CLASSIFIC3 COMPUTED BY ((select Nome from Classific3 C where 
C.ChaveCl3 = Produto.ChaveCl3)),
  CLASSIFIC4 COMPUTED BY ((select Nome from Classific4 C where 
C.ChaveCl4 = Produto.ChaveCl4)),
  DESCRCDIM COMPUTED BY ((select Descricao from CatDimens C where 
C.ChaveCDi = Produto.ChaveCDi)),
  CLASSFISC COMPUTED BY ((select CODIGO from CLASSFISC C where 
C.ChaveClF = Produto.ChaveClF)),
  ...
);

Então, na interface (cliente) eu só dou um select nessa tabela e tenho 
todos os campos que necessito.
Aí beleza, É o que eu tenho atualmente.
Neste caso você me orientaria a mudar essa estrutura, eliminar os campos 
calculados e fazer joins para obter o campos na interface. Dessa forma 
eu teria uma performance muito melhor?

Seria isso?






Mais detalhes sobre a lista de discussão lista