segunda-feira, 12 de julho de 2010

Dica de padronização de comandos SQL (Campos com especificação do nome da tabela)

Um problema muito frequente que ocorre nos aplicativos nas consultas efetuadas as informações das tabelas do banco de dados é o erro de “ambiguidade”, ou seja, aplicativos que estavam rodando normalmente e na inclusão de um simples campo em uma determinada tabela pode gerar erro em qualquer ponto do aplicativo se as query´s que utilizam junções (JOIN) não estiverem bem estruturadas.

Exemplo:

Digamos que em nossa base de dados tenhamos a seguintes tabelas:

CREATE TABLE CLIENTE
(
   IDCliente INTEGER,
   Nome CHARACTER(60),
   IDGrupo INTEGER,
   Obs CHARACTER(100)
)
CREATE TABLE GRUPO
(
   IDGrupo INTEGER,
   Descricao CHARACTER(60)
)


Podemos montar uma consulta da seguinte forma que o resultado será apresentado sem nenhum erro, veja:



SELECT NOME,DESCRICAO,OBS
  FROM CLIENTE
  LEFT JOIN GRUPO ON GRUPO.IDGRUPO = CLIENTE.IDGRUPO


Agora digamos que a necessidade nos leve a incluir na tabela GRUPO um campo com o nome “Obs”, desta forma o comando acima descrito passa a retornar um erro, pois teremos dois campos com o mesmo nome nas tabelas “CLIENTE” e “GRUPO”. Naturalmente no aplicativo onde estiver utilizando este SELECT, será gerado uma exceção referente a “ambiguidade”, pois o banco de dados não saberá qual campo “Obs” ele deve retornar na consulta, se o da tabela “CLIENTE” ou “GRUPO”.



Para evitar este tipo de falha, devemos ter como padrão a utilização do nome da tabela na frente de todos os campos relacionados nas consultas (SELECT´S). Exemplo:



SELECT C.NOME,G.DESCRICAO,C.OBSERVACAO 
  FROM CLIENTE AS C
  LEFT JOIN GRUPO AS G ON G.IDGRUPO = C.IDGRUPO

Desta forma se alguma mudança for efetuada nas tabelas, não corremos o risco de ocorrerem falhas de ambiguidade em nossa aplicação.


Nenhum comentário:

Postar um comentário