[firebase-br] Identificador para tabelas

Eduardo Jedliczka eduardo em gerasoft.com.br
Ter Maio 3 18:08:21 -03 2005


Cara acho que sua visão está um pouco equivocada.

Qual é o problema de montar selects sobre as Views ???? Acho que sua
situação é a mais propícia para isto.

O Componente em Questão é o QuantumGrid ? Se for, ele funciona perfeitamente
com Views, mas há apenas algumas coisas para configurar.

Quanto a sua pergunta, sem sombra de dúvidas Inner / Left Joins são muito
mas "leves" para o banco que um Computed by. Inner join são resolvidos numa
única fase entre os results da tabela principal com os results da clausula
On da junção. Campos calculados são resolvidos linha a linha.

Se não acreditar, faça um teste simples...

Crie uma tabela com mil registros na tabela principal ,e 5 ou 6 registros em
cada tabela filha. veja a performance com computed by e inner join.

Aumente a quantidade de registros da tabela principal para 50 mil e repita o
teste.

Aumente a quantidade de registros da tabela principal para 500 mil e repita
o teste.

Se ainda tiver paciência de esperar o resultado com computed by, coloque
mais de 2 milhões e veja o que acontece.

[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 5:42 PM
Subject: Re: [firebase-br] Identificador para tabelas


>
> 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
> >
> >
> >
> >
>
>
> ______________________________________________
> 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
>
>





Mais detalhes sobre a lista de discussão lista