Buscar

Relacionamentos e integridade referencial em firebird

nome

Eneias Carvalho

Colunista ainda sem descrição. Caro colunista, por favor envie-nos sua descrição.

Bem pessoal, passei um tempo afastado, mas já estou de volta, vamos lá, trabalhei muito tempo com Delphi juntamente com Access, mas agora resolvi migrar minhas aplicações para FireBird, que é um banco de dados mais robusto, cliente/servidor, gratuito e varias outras carcteristicas que não há necessidade de descrever aqui, pois o artigo no trata de comparações.

Assim que resolvi migrar aplicações Access para FireBird, pintou a primeira e um pouco mais chata dúvida, como fazer relacionamentos em FireBird, como impor integridade referencial, penei um pouco para encontrar tal resposta, ai pensei que seria legal escrever um artigo aqui sobre isso, pois acredito que tenha pessoas que possam ter dúvidas parecidas com essa, pois bem chega de embolação e vamos lá:
Aqui vai um exemplo de relacionamentos em Access:
Imagem 1


Relacionamentos em Access não tem mistério, são apenas alguns cliques e arrastares do mouse, dessa forma criamos os relacionamentos e impomos as integridades referencias, mas para quem quer usar FireBird e não tem uma ferramenta visual para executar essa tarefa, que parece ser tão simples em Access? Pois bem, relacionamentos em FireBird, como em InterBase, MySQL e vários outros bancos de dados, são chamados de foreign key, ou mesmo chave estrangeira (chave estrangeira em uma tabela é a chave primaria de outra tabela), por questões de ilustração usarei como ferramenta para tais exemplos o IBConsole que acompanha o FireBird, mas os mesmo exemplos são aplicados em prompt de comando do FireBird, pois o que importa são asinstruções SQL.
Criaremos duas tabelas, uma chamada UF e outra chamada CLIENTE, onde na tabela cliente irá conter uma chave estrangeira que no caso será o campo ID_UD, que o mesmo é a chave primaria da tabela UF, ambas as tabelas estarão contidas na base de dados de nome "art02.fdb", vamos às ilustrações:
Criando o banco de dados:
Imagem 2


Após a criação da base de dados vamos efetuar seu registro:
Imagem 3

Logo após nossa base de dados criada, iremos criar as tabelas, primeiramente a tabela UF:
Imagem 4

Agora a tabela CLIENTE:
Imagem 5


Como pode ser percebido, foram criadas as tabelas sem relação alguma, ou seja, apesar de conter o campo ID_UF a tabela CLIENTE não tem nenhum relação com a tabela UF, para muitos que não tem um conhecimento intermediário/avançado, isso seria muito fácil de resolver no Delphi, com um campo lookUp, mas quando se fize-se uma atualização na tabela UF, se o estado do Maranhão mudar sua id de MA para MO, os clientes que estariam cadastrados como sendo do estado do maranhão ficariam atualizados? Ou seja os clientes que tinham no campo ID_UF iriam ter seus dados atualizados? A resposta é simples, NÂO, e para tal que existe o relacionamento, e de que forma faríamos esse relacionamento? A seguir a resposta:
Alterando a tabela CLIENTE:
Imagem 6


Mas ai vem a pergunta, o que significa tudo isso? Bem vamos por partes, inicialmente alteramos a tabela cliente "ALTER TABLE CLIENTE", logo após essa instrução determinamos que desejamos incluir a chave estrangeira ou também como é conhecida foreign key "CONSTRAINT FK_ID_UF FOREIGN KEY(ID_UF)" no primeiro foreign key, determinamos qual o campo de nossa tabela receberá a chave estrangeira no caso o campo ID_UF da tabela cliente, logo após fazemos uma referencia a qual tabela e a qual campo estaremos realizando esse relacionamento "REFERENCES UF(ID_UF)" logo após vem as seguintes instruções "ON DELETE SET NULL ON UPDATE CASCADE", e pra quer serve isso? Justamente para impor a integridade, como? Na primeira parte determinamos que se um campo da tabela UF for deletado, os registros da tabela CLIENTE que contenham aquele campo, ficaram com um valor nulo no referido campo, ou seja, se há um registro na tabela cliente com o ID_UF rj, e o ID_UF rj for excluído da tabela UF, o referido registro na tabela CLIENTE ficara com o campo nulo, ou seja, sem nada no campo, onde antes continha o rj, "ON DELETE SET NULL...", na sequencia "ON UPDATE CASCADE", determinamos que caso haja atualização de registros(chave primaria) na tabela UF todos os registros que continham o mesmo registro na tabela CLIENTE(chave estrangeira) seram atualizados, ou seja, se há na tabela UF o registro "CE", e o mesmo mudar para "CA", todos os registros na tabela CLIENTE que antes tinham o registro "CE", ficaram automaticamente com o registro "CA".
Existem vários outros tipos de integridades que podem ser empregadas aqui, simplismente ilustrei o mais comumente usado( pelo menos por mim), espero ter ajudado e qualquer duvida é só postar no site que se estiver ao meu alcance eu resolverei. Sem mais para o momento, abraços:
Obs: as últimas imagens mostram inclusões de registros e o que acontece com os mesmo, seguindo o que escrevi logo acima:
Imagem 7 | Imagem 8 | Imagem 9 | Imagem 10 | Imagem 11| Imagem 12

Publicidade

Vote no artigo




Quantidade de votos: 1 voto
Aceitação: 20%


Detalhes do artigo

Categoria: Banco de dados
Adicionado dia: 19/05/06
Por: Eneias Carvalho
Visualizado: 33830 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009