[firebase-br] Identificador para tabelas

Edson T. Marques marques em oriontec.com.br
Ter Maio 3 17:42:43 -03 2005


Infelizmente não posso usar view.
Nós temos um componente, feito em delphi, que permite fazer a 
manipulação das consultas que são exibidas na tela para o usuário. Com 
este componente nós implementamos funcionalidades muito importantes para 
o nosso sistema. Uma delas é, por exemplo, se o usuário vê na tela o 
Grid de produtos cadastrados ele poderá fazer filtros da maneira que ele 
quizer, em qualquer coluna, que os filtros (tem uma interface apropriada 
para isso) são transformados em SQL e incorporados na clausula where da 
consulta que retorna oque ele está vendo.

Se eu criar uma view no banco de dados para retornar esses dados, além 
de eu não me livrar dos joins (porque o select da view também vai ter 
que ter as junções), o esquema do componente vai fazer selects sobre 
result set da view, bom...  aí é que a vaca vai pro brejo pra valer!

Eu preciso é de uma sentença sobre essa questão.
Na sua opinião oque que é menos pior os campos calculados ou os joins?

[s]
Edson.

Eduardo Jedliczka escreveu:

>Edson,
>
>Para o seu caso, a melhor solução seria criar uma VIEW.  - Recomendo a
>leitura dos PDFs do Interbase 6 sobre Views e Joins.
>
>Dependendo do seu componente de acesso, poderia gravar os campos na tabela
>real e consultar pela view, em outros casos, poderia criar algumas Triggers
>na view para realizar o insert, delete e update...
>
>Posso dar mais detalhes à noite...
>
>[s]
>
>==========================
>Eduardo Jedliczka
>Gerasoft Informática
>Apucarana - Pr
>==========================
>
>----- Original Message ----- 
>From: "Edson T. Marques" <marques em oriontec.com.br>
>To: "FireBase" <lista em firebase.com.br>
>Sent: Tuesday, May 03, 2005 4:16 PM
>Subject: Re: [firebase-br] Identificador para tabelas
>
>
>  
>
>>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?
>>
>>
>>
>>______________________________________________
>>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>>Para editar sua configuração na lista, use o endereço
>>    
>>
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>  
>
>>Para consultar mensagens antigas:
>>    
>>
>http://search.gmane.org/search.php?group=firebase
>  
>
>>    
>>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>Para consultar mensagens antigas: http://search.gmane.org/search.php?group=rebase
>
>
>  
>





Mais detalhes sobre a lista de discussão lista