Um dos objetivos de uma boa estrutura de base de dados consiste em remover a redundância de dados (dados duplicados). Para alcançar esse objetivo, deverá dividir os dados em muitas tabelas baseadas em assuntos para que cada facto seja representado apenas uma vez. Desse modo, proporciona ao Access uma forma de reunir novamente a informação dividida — pode fazê-lo colocando campos comuns em tabelas relacionadas. Para executar este passo corretamente, tem de compreender as relações entre as tabelas e depois especificar essas relações na sua base de dados.
Neste artigo
Introdução
Depois de criar uma tabela para cada assunto na sua base de dados, tem de proporcionar ao Access uma forma de reunir essa informação novamente quando for necessário. Para tal, é necessário colocar campos comuns em tabelas relacionadas e definir relações entre as tabelas. Poderá depois criar consultas, formulários e relatórios que apresentem informações de diversas tabelas de uma só vez. Por exemplo, o formulário aqui apresentado inclui informações obtidas a partir de várias tabelas:
1. As informações neste formulário derivam da tabela Clientes...
2. ... da tabela Encomendas...
3. ... da tabela Produtos...
4. ...e da tabela Detalhes da Encomenda.
O nome de cliente na caixa Cobrar A é obtido a partir da tabela Clientes; os valores Cód. Encomenda e Data Encomenda provêm da tabela Encomendas; o Nome do produto provém da tabela Produtos; e os valores Preço Unitário e Quantidade provêm da tabela Detalhes da Encomenda. Estas tabelas estão ligadas umas às outros de várias formas para apresentar informações de cada uma delas no formulário.
No exemplo anterior, os campos existentes nas tabelas têm de ser coordenados para que apresentem informações sobre a mesma encomenda. Esta coordenação é conseguida utilizando-se relações de tabelas. Uma relação de tabela funciona fazendo corresponder dados em campos chave (frequentemente um campo com o mesmo nome em ambas as tabelas). Na maior parte dos casos, estes campos correspondentes são a chave primária de uma tabela (a qual fornece um identificador exclusivo para cada registo) e uma chave externa na outra tabela. Por exemplo, os empregados podem ser associados a encomendas pelas quais sejam responsáveis criando-se uma relação de tabela entre os campos IDdeEmpregado nas tabelas Empregados e Encomendas.
1. IDdeEmpregado aparece em ambas as tabelas: como chave primária...
2. ... e como uma chave externa.
Tipos de relações de tabela
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 de Clientes e uma tabela de Encomendas como exemplo. Um cliente pode efetuar qualquer número de encomendas. Isto aplica-se a qualquer cliente representado na tabela Clientes e poderão existir muitas encomendas na tabela Encomendas. A relação entre a tabela Clientes e a tabela Encomendas é uma relação um-para-muitos.
Para representar uma relação um-para-muitos na estrutura da base de dados, adicione a chave primária do lado "um" da relação como campo ou campos adicionais à tabela no lado "muitos" da relação. Neste caso, por exemplo, deverá adicionar um novo campo (o campo ID da tabela Clientes) à tabela Encomendas e atribuir-lhe o nome ID de Cliente. O Access pode então utilizar o número ID de Cliente na tabela Encomendas para localizar o cliente correto para cada encomenda.
-
Uma relação muitos-para-muitos
Agora, analisemos a relação entre uma tabela de Produtos e uma tabela de Encomendas. Uma única encomenda pode incluir mais de um produto. Por outro lado, um único produto pode aparecer em muitas encomendas. Como tal, para cada registo na tabela Encomendas, pode haver vários registos na tabela Produtos. Além disso, para cada registo na tabela Produtos, pode haver vários registos na tabela Encomendas. Esta relação chama-se uma relação muitos-para-muitos. Tenha em atenção que, para detetar relações muitos-para-muitos entre tabelas, é importante considerar ambos os lados da relação.
Para representar uma relação muitos-para-muitos, terá de criar uma terceira tabela, frequentemente apelidada de tabela de união, a qual divide a relação muitos-para-muitos em duas relações um-para-muitos. A chave primária de cada uma das duas tabelas é introduzida na terceira tabela. Como tal, a terceira tabela regista cada ocorrência, ou instância, da relação. Por exemplo, a tabela Encomendas e a tabela Produtos têm uma relação muitos-para-muitos que é definida criando-se duas relações um-para-muitos para a tabela Detalhes da Encomenda. Uma encomenda pode ter muitos produtos e cada produto pode aparecer em muitas encomendas.
-
Uma relação um-para-um
Numa relação um-para-um, cada registo na primeira tabela só pode ter um registo correspondente na segunda tabela e cada registo na segunda tabela só pode ter um registo correspondente na primeira tabela. Esta relação não é comum porque, muito frequentemente, a informação relacionada desta forma é armazenada na mesma tabela. Poderá utilizar uma relação um-para-um para dividir uma tabela com muitos campos, para isolar parte de uma tabela por motivos de segurança ou para armazenar informações aplicáveis apenas a um subconjunto da tabela principal. Quando identificar uma relação deste tipo, ambas as tabelas têm de partilhar um campo comum.
Porquê criar relações de tabela?
É possível criar explicitamente relações de tabelas utilizando a janela Relações ou arrastando um campo a partir do painel Lista de Campos. O Access utiliza relações de tabelas para decidir como associar tabelas quando o utilizador precisar de utilizá-las num objeto de base de dados. Existem várias razões para criar relações de tabelas antes de criar outros objetos de base de dados, tais como formulários, consultas e relatórios.
-
As relações de tabela informam as estruturas de consulta
Para trabalhar com registos de mais de uma tabela, é frequentemente necessário criar uma consulta que associe as tabelas. A consulta faz a correspondência entre os valores no campo de chave primária da primeira tabela com um campo de chave externa na segunda tabela. Por exemplo, para devolver linhas que listem todas as encomendas de cada cliente, deverá criar uma consulta que associe a tabela Clientes à tabela Encomendas com base no campo ID de Cliente. Na janela Relações, é possível especificar manualmente os campos a associar. Mas, se já tiver uma relação definida entre as tabelas, o Access fornece a associação predefinida, com base na relação de tabelas existente. Adicionalmente, se utilizar um dos assistentes de consultas, o Access utiliza a informação que recolheu das relações das tabelas já definidas para apresentar escolhas informadas e pré-preencher as definições de propriedades com os valores predefinidos adequados.
-
As relações de tabela informam as estruturas de formulário e relatório
Quando estruturar um formulário ou relatório, o Access utiliza a informação recolhida das relações de tabelas já definidas para apresentar escolhas informadas e pré-preencher as definições de propriedades com os valores predefinidos adequados.
-
As relações de tabela são a base sobre a qual é possível impor integridade referencial para ajudar a evitar registos órfãos na base de dados. Um registo órfão é um registo com uma referência para outro registo inexistente (por exemplo, um registo de encomenda que faça referência a um registo de cliente inexistente).
Quando estruturar uma base de dados, o utilizador divide as informações em tabelas, tendo cada uma delas uma chave primária. São depois adicionadas chaves externas para relacionar as tabelas que façam referência a essas chaves primárias. Estes pares de chave externa/chave primária formam a base das relações de tabelas e das consultas multitabela. É importante que estas referências chave externa/chave primária se mantenham sincronizadas. A integridade das referências, que depende das relações das tabelas, ajuda a garantir que as referências se mantenham sincronizadas.
Noções sobre integridade referencial
Quando estruturar uma base de dados, o utilizador divide a informação da base de dados em muitas tabelas baseadas em assuntos para minimizar a redundância de dados. Depois, proporciona ao Access uma forma de reunir novamente os dados colocando campos comuns em tabelas relacionadas. Por exemplo, para representar uma relação um-para-muitos, deverá adicionar a chave primária da tabela "um" e adicioná-la como campo adicional à tabela "muitos". Para reunir os dados, o Access utiliza o valor na tabela "muitos" e procura o valor correspondente na tabela "um". Desta forma, os valores na tabela "muitos" fazem referência aos valores correspondentes na tabela "um".
Suponha que tem uma relação um-para-muitos entre Transitários e Encomendas e pretende eliminar um Transitário. Se o transitário que pretende eliminar tiver encomendas na tabela Encomendas, essas encomendas ficarão "órfãs" quando eliminar o registo de Transitário. As encomendas irão ainda conter um código de transitário, mas o código deixará de ser válido porque o registo ao qual faz referência já não existe.
O objetivo da integridade referencial consiste em impedir órfãos e manter as referências sincronizadas para que esta situação hipotética nunca ocorra.
É possível impor a integridade referencial ativando-a para uma relação de tabelas. Depois de imposta, o Access rejeita qualquer operação que viole a integridade referencial dessa relação de tabelas. Isto significa que o Access vai rejeitar atualizações que alterem o destino de uma referência e as eliminações que removam o destino de uma referência. É possível que tenha uma necessidade perfeitamente válida para alterar a chave primária para um transitário que tenha encomendas na tabela Encomendas. Para esses casos, o que realmente necessita é que o Access atualize automaticamente todas as linhas afetadas como parte de uma única operação. Desta forma, o Access garante que a atualização é concluída na íntegra, de modo a que a base de dados não fique 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 a integridade referencial e escolhe a opção Propagar Atualização dos Campos Relacionados e, em seguida, atualiza uma chave primária, o Access atualiza automaticamente todos os campos com referência à chave primária.
Também é possível que tenha um motivo válido para eliminar uma linha e todos os registos relacionados (por exemplo, um registo de Transitário e todas as encomendas relacionadas desse transitário). Por este motivo, o Access suporta a opção Propagar Eliminação dos Registos Relacionados. Quando impõe a integridade referencial e escolhe a opção Propagar Eliminação dos Registos Relacionados e, em seguida, elimina um registo no lado da chave primária da relação, o Access elimina automaticamente todos os registos com referência à chave primária.
Ver relações de tabela
Para ver as relações de tabelas, clique em Relações no separador Ferramentas da Base de Dados. A janela Relações abre-se, apresentando eventuais relações existentes. Se não tiverem sido definidas relações de tabelas e estiver a abrir a janela Relações pela primeira vez, o, Access pede que adicione uma tabela ou consulta à janela.
Abrir a janela Relações
-
Clique em Ficheiro, clique em Abrir e, em seguida, selecione e abra a base de dados.
-
No separador Ferramentas da Base de Dados, no grupo Relações, clique em Relações.
-
No separador Estrutura das Relações , no grupo Relações , clique em Todas as Relações.
Esta ação apresenta todas as relações definidas na base de dados. Tenha em atenção que as tabelas ocultas (tabelas para as quais a caixa de verificação Oculto na caixa de diálogo Propriedades da tabela está selecionada) e respetivas relações não serão apresentadas, a menos que a caixa de verificação Mostrar Objetos Ocultos esteja selecionada na caixa de diálogo Opções de Navegação.
Uma relação de tabelas é representada por uma linha de relação desenhada entre tabelas na janela Relações. Uma relação que não imponha integridade referencial aparece como uma linha fina entre os campos comuns que suportam a relação. Quando selecionar a relação clicando na respetiva linha, a linha engrossa para indicar que está selecionada. Se impuser integridade referencial para esta relação, a linha fica mais espessa em cada extremidade. Além disso, o número 1 aparece sobre a parte espessa da linha num dos lados da relação, sendo que o símbolo de infinito (∞) aparecer sobre a parte espessa da linha no outro lado.
Quando a janela Relações está ativa, pode selecionar a partir dos comandos seguintes existentes no friso:
No separador Estrutura das Relações , no grupo Ferramentas :
-
Editar Relações Abre a caixa de diálogo Editar Relações. Quando uma linha de relação é selecionada, é possível clicar em Editar Relações para alterar a relação de tabela. Também é possível fazer duplo clique na linha de relação.
-
Limpar Esquema Remove todas as tabelas e relações apresentadas na janela Relações. Tenha em atenção que este comando apenas oculta as tabelas e relações, não as elimina.
-
Relatório de Relações Cria um relatório que apresenta as tabelas e relações na base de dados. O relatório apresenta apenas as tabelas e relações que não estejam ocultas na janela Relações.
No separador Estrutura das Relações , no grupo Relações :
-
Adicionar Tabelas Permite que a seleção de tabelas seja apresentada na janela Relações.
-
Ocultar Tabela Oculta a tabela selecionada na janela Relações.
-
Relações Diretas Apresenta todas as relações e tabelas relacionadas para a tabela selecionada na janela Relações (caso ainda não estejam apresentadas).
-
Todas as Relações Apresenta todas as relações e tabelas relacionadas na base de dados na janela Relações. Tenha em atenção que as tabelas ocultas (tabelas para as quais a caixa de verificação Oculto na caixa de diálogo Propriedades da tabela esteja selecionada) e respetivas relações não serão apresentadas, a menos que Mostrar Objetos Ocultos esteja selecionado na caixa de diálogo Opções de Navegação.
-
Fechar Fecha a janela Relações. Se tiver efetuado alterações ao esquema da janela Relações, ser-lhe-á perguntado se pretende guardar essas alterações.