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,OBSFROM CLIENTELEFT 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.OBSERVACAOFROM CLIENTE AS CLEFT 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