[firebase-br] Identificador para tabelas

Edson T. Marques marques em oriontec.com.br
Qua Maio 4 09:24:03 -03 2005


Opaaaa...!

Agora sim a discução ficou boa e estamos nos entendendo!
Fiquei muito satisfeito com as respostas de vocês! Muito agradecido! Já 
dá para tomar uma decisão e isso veio em ótima hora. Estou trabalhando 
com esse banco já há uns 2 anos e agora pintou a oportunidade de estar 
fazendo umas correções. Esses campos "computed" sempre me deixavam com 
uma enorme interrogação quando os via no script!

Quanto `a xingarem minha doce mãezinha (falando nisso domingo é dia 
deleas e um feliz dia das mães para todos) infelizmente isso já vem 
acontecendo, oque me levou a ficar meio inquieto e um tanto estressado.

Quanto à view nós já tentamos fazer isso aqui no banco mas foi do lado 
da tabela de Pessoas (não da de Produto). A tabela de Pessoas do nosso 
banco de dados se relaciona, também, com uma porrada de outras tabelas, 
os dados foram quebrados em várias tabelas, assim temos, por exemplo, 
uma tabela de pessoas se relaconando com uma tabela para dados de Pessoa 
Física, Juridica, Endereços, Telefones... e por aí vai. A solução que 
demos foi justamente fazer uma grande view de Pessoas que juntasse todas 
essas informações em uma única estrutura.

Aí veio o efeito: quando as tabelas foram crescendo fomos tendo quedas 
drásticas de performance. E isso era no FB 1.0. Chegavamos ao ponto de 
para trazer 5000 pessoas numa consulta (simples tipo: select * from 
viewPessoas where DTCadastro <= '28-02-2000') tinhamos que esperar cerca 
de 25 segundos para o retorno (isso aqui na empresa, onde todos os 
equipamentos são ótimos - nos clientes gastava minutos...). Os clientes 
começaram a atirar coisas das mais estranhas na gente (!) (se é que 
vocês me entendem). Foi quando tivemos a idéa de usarmos stored 
procedure para retornar esses dados. Como podemos passar parâmetros para 
o SP podiamos fazer as consultas mais específicas. Demos uma reciclada 
nas nossas idéas (melhoramos as consultas, os índices e tudo mais) e 
para compensar ainda saiu o FB 1.5 que melhorou muito a performance com 
PLANS mais inteligentes... Aí foi que a coisa ficou suportável.

Ainda sobre view, a informação que temos é que, em uma view,  se você 
faz um select com where, ele vai ser "select sobre o result set da view" 
e isso seria mais lento do que fazer a consulta direto com os joins e 
com o where apropriado. Principalmente se a view for muito cheia de 
joins (são left joins porque é necessário retornar todos os Produtos 
mais os campos das tabelas com as quais Produtos se relaciona)). Essa 
informação está errada?

Oque eu estou tentando dizer é que no nosso sistema eu TENHO que ter o 
controle sobre a consulta. Isso é necessário porque criamos interfaces 
que permitem ao usuário manipular (amigavelmente) as cláusulas "where" e 
"order by" dessas consultas, justamente para que eles possam controlar 
oque eles querem ver na tela. Dessa forma, se considerarem o exemplo do 
produtos, quando o usuário entra na interface de cadastro de produtos, 
por exemplo, a primeira coisa que ele tem é uma interface com um grid 
que mostra para ele todos os produtos do cadastro (e consequentemente os 
dados das demais tabelas (isso atualmente sendo feito com campos 
computed)). Foi necessário fazer isso (essa interface com consulta 
trazendo tudo) porque enfrentamos uma resistência muito grande dos 
usuário do nosso antigo sistema feito em clipper. Eles ameçavam não 
renovar com a gente se a interface fosse muito diferente. A partir daí 
ele (o usuário) pode livremente cadastrar um novo produto, alterar um 
existente, apagar outro, pode fazer um filtro, pode ordenar por qualquer 
coluna, fazer buscas, organizar as colunas do grid e os dados e depois 
tirar um relatório disso, e vai por aí a fora.... O filtro e a ordenação 
são feitas diretamente alterando o comando SQL (nas clausulas where e/ou 
order by) e refazendo a consulta. Já a busca nós implementamos 
diferente, trabalhamos direto sobre o dataset. Usamos os componetes IBX. 
o DBgrid fomos nós que implementamos.

É por isso que com a view o negócio complica!

Pessoal, mais uma vêz muito obrigado!
Eduardo, valeu muito cara!

[]'s
Edson




Mais detalhes sobre a lista de discussão lista