Criação e uso de Busca Fonetizada em Base de Dados  Relacionais, em Português – Parte 02


Nossa tarefa será realizar a busca fonética da forma mais eficiente possível nesta tabela. Neste ponto devemos realizar a carga da tabela, para tanto criei uma base de inserção. Abaixo faço isso por insert, trabalhando no Oracle o preferível seria SQLLOADER, mas optei por essa forma para que os exemplos possam ser adaptados de forma mais rápida a qualquer banco de dados, e também por que carga de dados esta fora do escopo desse artigo.

sql-30-09-2008pic03.JPG
Figura.3 (script2)


Neste momento podemos realizar uma busca válida com a função fonética, como abaixo, onde tanto faz digitar LUIZ com “Z” ou LUIS com “S”. obs.: neste momento a função FONETIZAR deve estar criada, ver o artigo //www.devmedia.com.br/articles/viewcomp.asp?comp=6300, e realize o procedimento lá descrito.


sql-30-09-2008pic04.JPG 

Figura.4(script 3)

Podemos constatar que para o nome completo já temos o retorno, mesmo escrevendo “LUIS” e não “LUIZ”,  mas a aplicação deixaria bastante a desejar se soubéssemos apenas que havia “LUIZ” ou “AUGUSTO”  no nome, ou ainda se nossa base tivesse milhões de dados, a busca não seria eficiente. Para resolvermos esses problemas criaremos uma tabela auxiliar.

sql-30-09-2008pic05.JPG
Figura.5(script 4)


Neste momento iremos popular essa tabela, iremos supor a necessidade de popular uma tabela com milhares de registros, utilizaremos uma procedure de banco para tanto. Aqui faço um parêntese o ideal é que a cada registro inserido/alterado na tabela CLIENTE, acione uma TRIGGER que atualize a tabela auxiliar, fica como exercício para os leitores. A seguinte procedure de banco (Oracle 9i) pode ser usada para criar ou recriar os dados na tabela auxiliar

sql-30-09-2008pic06.JPG

Figura. 6 (script 5)

Iremos então executar a procedure criada com a seqüência de comando abaixo:

     BEGIN

         FONETIZAR_CLIENTE;

     COMMIT;

     END;                                            

 

Feito isso temos nossa tabela auxiliar populada.

sql-30-09-2008pic07.JPG 

Figura. 7

Acabamos de criar, e popular, uma tabela auxiliar com as partes fonetizadas do campo nom_cliente, por exemplo: o cliente EDSON ARANTES DO NASCIMENTO código 31701041 consta na tabela CLIENTE_FONETICA como:


sql-30-09-2008pic08.JPG

Portanto nesta tabela podemos realizar uma rápida busca por qualquer parte do nome, não precisamos fonetizar a coluna de comparação e ainda podemos criar os índices necessários no banco para termos um melhor desempenho em nossas consultas, isso com o custo adicional de manutenção e espaço requeridos no Banco de Dados.