Um dos objetivos de um bom design de banco de dados é a remoção de redundância de dados (dados duplicados). Para atingir esse objetivo, dividem-se os dados em várias tabelas baseadas em assunto para que cada fato seja representado apenas uma vez. Em seguida, pode fornecer Access com uma forma de reunir novamente as informações divididas. Pode fazê-lo ao colocar campos comuns em tabelas relacionadas. Contudo, para realizar esta etapa corretamente, é preciso compreender as relações entre as tabelas e especificar essas relações no banco de dados.
Neste artigo
Introdução
Depois de criar uma tabela para cada assunto na sua base de dados, tem de dar aos Access uma forma de voltar a reunir essas informações quando necessário. Isso é feito colocando campos em comum em tabelas que são relacionadas e definindo relações entre as tabelas. Você pode então criar consultas, formulários e relatórios que exibem informações de várias tabelas de uma só vez. Por exemplo, o formulário mostrado aqui inclui informações retiradas de várias tabelas:
1. As informações desse formulário são originárias da tabela Clientes...
2. ...da tabela Pedidos...
3. ...da tabela Produtos...
4. ...e da tabela Detalhes do Pedido.
O nome do cliente na caixa Cobrar é recuperado da tabela Clientes; os valores de Código do Pedido e Data do Pedido vêm da tabela Pedidos; o nome do Produto vem da tabela Produtos; os valores de Preço Unitário e Quantidade vêm da tabela Detalhes do Pedido. Essas tabelas são vinculadas umas as outras de várias formas para trazer as informações de todas para o formulário.
No exemplo anterior, os campos das tabelas precisam estar coordenados de forma que mostrem informações sobre o mesmo pedido. Tal coordenação é realizada usando relações de tabelas. Uma relação de tabelas funciona pela correspondência de dados em campos chave — frequentemente, um campo com o mesmo nome em ambas as tabelas. Na maioria dos casos, esses campos correspondentes são a chave primária de uma tabela, que fornece um identificador exclusivo para cada registro, e uma chave estrangeira na outra tabela. Por exemplo, funcionários podem ser associados a pedidos pelos quais são responsáveis criando uma relação de tabelas entre os campos IDFuncionário nas tabelas Funcionários e Pedidos.
1. IDFuncionário aparece em ambas as tabelas — como uma chave primária ...
2. ...e como uma chave estrangeira.
Tipos de relações de tabelas
Existem três tipos de relações de tabela no Access.
-
Uma relação um-para-muitos
Vamos utilizar uma base de dados de controlo de encomendas que inclui uma tabela Clientes e uma tabela Encomendas como exemplo. Um cliente pode fazer qualquer número de pedidos. Assim, para qualquer cliente representado na tabela Clientes, pode haver vários pedidos representados na tabela Pedidos. A relação entre a tabela Clientes e a tabela Pedidos é uma relação um-para-muitos.
Para representar uma relação um-para-muitos no seu design de banco de dados, tome a chave primária do lado "um" da relação e adicione-a como um campo ou campos adicionais à tabela no lado "muitos" da relação. Neste caso, por exemplo, você adiciona um novo campo — o campo ID da tabela Clientes — à tabela Pedidos e a nomeia ID do Cliente. Access pode, em seguida, utilizar o número do ID do Cliente na tabela Encomendas para localizar o cliente correto para cada encomenda.
-
Um relacionamento muitos-para-muitos
Agora, vamos ver a relação entre uma tabela Produtos e uma tabela Encomendas. Um único pedido pode incluir mais de um produto. Por outro lado, um único produto pode constar em vários pedidos. Assim, para todos os registros da tabela Pedidos, pode haver vários registros na tabela Produtos. Além disso, para cada registro na tabela Produtos, pode haver muitos registros na tabela Pedidos. Essa relação é denominada relação muitos-para-muitos. Observe que para detectar relações muitos-para-muitos existentes entre as tabelas é importante considerar ambos os lados da relação.
Para representar uma relação muitos-para-muitos, você deve criar uma terceira tabela, geralmente chamada de tabela de junção, que divide a relação muitos-para-muitos em duas relações um-para-muitos. Insira a chave primária de cada uma das duas tabelas na terceira tabela. Como resultado, a terceira tabela registra cada ocorrência, ou instância, da relação. Por exemplo, a tabela Pedidos e a tabela Produtos possuem uma relação muitos-para-muitos que é definida criando-se duas relações um-para-muitos com a tabela Detalhes do Pedido. Um pedido pode ter muitos produtos, e cada produto pode aparecer em muitos pedidos.
-
Uma relação um-para-um
Em uma relação um-para-um, cada registro na primeira tabela pode ter somente um registro correspondente na segunda tabela, e cada registro na segunda tabela pode ter somente um registro correspondente na primeira tabela. Essa relação não é comum porque, geralmente, as informações relacionadas dessa maneira são armazenadas na mesma tabela. Você poderia usar uma relação um-para-um para dividir uma tabela com muitos campos, isolar parte de uma tabela por motivos de segurança ou armazenar informações que se apliquem apenas a um subconjunto da tabela principal. Quando você identifica esse tipo de relação, ambas as tabelas devem compartilhar um campo em comum.
Por que criar relações de tabelas?
Você pode criar relações de tabelas explicitamente usando a janela Relações ou arrastando um campo do painel Lista de Campos. Access utiliza relações de tabela para decidir como associar tabelas quando precisar de as utilizar num objeto de base de dados. Há vários motivos que justificam a criação de relações de tabelas antes da criação de outros objetos do banco de dados, como formulários, consultas e relatórios.
-
As relações de tabelas informam os designs de consulta
Para trabalhar com registros de mais de uma tabela, você geralmente deve criar uma consulta que una as tabelas. A consulta faz a correspondência dos valores no campo de chave primária da primeira tabela com um campo de chave estrangeira na segunda tabela. Por exemplo, para retornar linhas que listem todos os pedidos de cada cliente, construa uma consulta que una a tabela Clientes à tabela Pedidos com base no campo ID do Cliente. Na janela Relações, você pode especificar manualmente os campos para junção. No entanto, se já tiver uma relação definida entre as tabelas, Access fornece a associação predefinida, com base na relação de tabela existente. Além disso, se utilizar um dos assistentes de consulta, Access utiliza as informações recolhidas a partir das relações de tabela que já definiu para lhe apresentar opções informadas e pré-preencher as definições de propriedades com valores predefinidos adequados.
-
As relações de tabelas informam os designs de formulário e relatório
Quando cria um formulário ou relatório, Access utiliza as informações recolhidas a partir das relações de tabela que já definiu para lhe apresentar opções informadas e pré-preencher as definições de propriedade com valores predefinidos adequados.
-
As relações de tabelas são a base através da qual você pode garantir a integridade referencial para ajudar a evitar registros órfãos no banco de dados. Um registro órfão é um registro com uma referência a outro registro que não existe — por exemplo, um registro de pedido que faça referência a um registro de cliente que não existe.
Quando você cria um banco de dados, divide as informações em tabelas, cada uma das quais tendo uma chave primária. Depois, adiciona chaves estrangeiras a tabelas relacionadas que façam referência a essas chaves primárias. Esses pares chave estrangeira-chave primária formam a base das relações de tabelas e consultas de várias tabelas. É importante que estas referências de chave primária-chave externa permaneçam sincronizadas. A integridade referencial ajuda a garantir que as referências permaneçam sincronizadas.
Noções básicas sobre integridade referencial
Ao criar um banco de dados, você divide as informações dele em várias tabelas baseadas em assunto para minimizar a redundância de dados. Em seguida, dá- Access uma forma de reunir novamente os dados ao colocar campos comuns em tabelas relacionadas. Por exemplo, para representar uma relação um-para-muitos, você pega a chave primária da tabela "um" e a adiciona como campo adicional na tabela "muitos". Para reunir novamente os dados, Access utiliza o valor na tabela "muitos" e procura o valor correspondente na tabela "um". Dessa forma, os valores na tabela "muitos" fazem referência aos valores correspondentes na tabela "um".
Suponha que você tenha uma relação um-para-muitos entre Expedidores e Pedidos e você deseje excluir um Expedidor. Se o expedidor que você deseja excluir tiver pedidos na tabela Pedidos, esses pedidos se tornarão "órfãos" quando você excluir o registro Expedidor. Os pedidos ainda conterão um código de expedidor, mas ele não será mais válido, porque o registro ao qual ele faz referência não existe mais.
O objetivo da integridade referencial é evitar órfãos e manter as referências em sincronia para que essa situação hipotética nunca ocorra.
Você impõe a integridade referencial habilitando-a para uma relação de tabelas. Depois de imposta, Access rejeita qualquer operação que viole a integridade referencial dessa relação de tabela. Isto significa que Access rejeitarão ambas as atualizações que alteram o destino de uma referência e eliminações que removem o destino de uma referência. É possível que tenha uma necessidade perfeitamente válida de alterar a chave primária de um transitário que tenha encomendas na tabela Encomendas. Para estes casos, o que realmente precisa é que Access atualizem automaticamente todas as linhas aplicadas como parte de uma única operação. Desta forma, Access garante que a atualização é concluída na totalidade para que a base de dados não fique num estado inconsistente, com algumas linhas atualizadas e outras não. Por este motivo, Access suporta a opção Propagar Atualização dos Campos Relacionados . Quando impõe integridade referencial e escolhe a opção Propagar Atualização dos Campos Relacionados e, em seguida, atualiza uma chave primária, Access atualiza automaticamente todos os campos que referenciam a chave primária.
É possível também que você venha a ter uma necessidade válida de excluir uma linha e todos os registros relacionados — por exemplo, um registro Transportador e todos os pedidos relacionados a ele. Por este motivo, Access suporta a opção Propagar Eliminação de Registos Relacionados . Quando impõe integridade referencial e escolhe a opção Propagar Eliminação de Registos Relacionados e, em seguida, elimina um registo no lado da chave primária da relação, Access elimina automaticamente todos os registos que referenciam a chave primária.
Exibir relações de tabelas
Para exibir as relações de tabelas, clique em Relações na guia Ferramentas de Banco de Dados. A janela Relações é aberta e exibe todas as relações existentes. Se nenhuma relação de tabela tiver sido definida e você estiver abrindo a janela Relações pela primeira vez, Access solicitará que você adicione uma tabela ou consulta à janela.
Abrir a janela Relações
-
Clique em Arquivo, clique em Abrir e, em seguida, selecione e abra o banco de dados.
-
Na guia Ferramentas de Banco de Dados, no grupo Relações, clique em Relações.
-
Na guia Design de Relações , no grupo Relações , clique em Todas as Relações.Isso exibe todas as relações definidas em seu banco de dados. Observe que as tabelas ocultas (tabelas para as quais a caixa de seleção Oculta na caixa de diálogo Propriedades da tabela está marcada) e suas relações não serão mostradas, a menos que a caixa de seleção Mostrar Objetos Ocultos esteja marcada na caixa de diálogo Opções de Navegação.
Uma relação de tabelas é representada por uma linha de relação traçada entre tabelas na janela Relações. Uma relação que não impõe integridade referencial aparece como uma linha fina entre os campos em comum que dão suporte à relação. Quando você seleciona a relação clicando na respectiva linha, a linha fica mais espessa para indicar que está selecionada. Se você impuser a integridade referencial para essa relação, a linha aparecerá mais espessa em cada extremidade. Além disso, o número 1 aparecerá sobre a parte espessa da linha em um lado da relação e o símbolo de infinito (∞) aparecerá sobre a parte espessa da linha no outro lado.
Quando a janela Relações está ativa, você pode selecionar entre os seguintes comandos na Faixa de Opções:
Na guia Design de Relações , no grupo Ferramentas :
-
Editar Relações Abre a caixa de diálogo Editar Relações. Quando você seleciona uma linha de relação, pode clicar em Editar Relações para alterar a relação da tabela. Você também pode clicar duas vezes na linha da relação.
-
Limpar Layout Remove todas as tabelas e relações da exibição na janela Relações. Observe que esse comando só oculta as tabelas e relações — ele não as exclui.
-
Relatório de Relações Cria um relatório que exibe as tabelas e relações no banco de dados. O relatório mostra somente as tabelas e as relações que não estão ocultas na janela Relações.
Na guia Design de Relações , no grupo Relações :
-
Adicionar tabelas Permite que a seleção de tabelas seja exibida na janela Relações.
-
Ocultar Tabela Oculta a tabela selecionada na janela Relações.
-
Mostrar Relações Diretas Exibe todas as relações e tabelas relacionadas da tabela selecionada na janela Relações, se ainda não estiverem exibidas.
-
Todas as Relações Exibe todas as relações e tabelas relacionadas do banco de dados na janela Relações. Observe que as tabelas ocultas (tabelas para as quais a caixa de seleção Oculta na caixa de diálogo Propriedades da tabela está marcada) e suas relações não serão mostradas a menos que Mostrar Objetos Ocultos esteja marcada na caixa de diálogo Opções de Navegação.
-
Fechar Fecha a janela Relações. Se você tiver feito alterações no layout da janela Relações, será perguntado se deseja salvá-las.