Como definir relações entre tabelas em um banco de dados do Access

Número original do KB: 304466

Observação

Principiante: Requer conhecimento da interface do usuário em computadores de usuário único. Este artigo aplica-se apenas a um banco de dados do Microsoft Access (.mdb ou .accdb).

Resumo

Este artigo descreve como definir relações em um banco de dados do Microsoft Access. O artigo contém os seguintes tópicos:

  • O que são relações de tabela?
  • Tipos de relações de tabela
    • Relações de um para muitos
    • Relações de muitos para muitos
    • Relações de um para um
  • Como definir relações entre tabelas
    • Como definir uma relação de um para muitos ou de um para um
    • Como definir uma relação de muitos para muitos
  • Integridade referencial
  • Atualizações e exclusões em cascata
  • Tipos de junção

O que são relações de tabela?

Em um banco de dados relacional, as relações permitem que você evite dados redundantes. Por exemplo, se você está projetando um banco de dados que rastreará informações sobre livros, pode haver uma tabela chamada "Títulos" que armazena informações sobre cada livro, como o título do livro, a data de publicação e o editor. Também há informações que você pode querer armazenar sobre o editor, como o número de telefone, o endereço e o CEP/Código Postal dele. Se você armazenasse todas essas informações na tabela "Títulos", o número de telefone do editor seria duplicado para cada título impresso pelo editor.

Uma solução melhor é armazenar as informações do editor apenas uma vez, em uma tabela separada que chamaremos de "Editores". Você então colocaria um ponteiro na tabela" Títulos "que faz referência a uma entrada na tabela" Editores ".

Para garantir que os dados permaneçam sincronizados, você pode impor a integridade referencial entre as tabelas. Relações de integridade referencial ajudam a garantir que as informações em uma tabela correspondam às informações em outra. Por exemplo, cada título na tabela "Títulos" deve ser associado a um editor específico na tabela "Editores". Um título não pode ser adicionado ao banco de dados de um editor que não existe no banco de dados.

Relações lógicas em um banco de dados permitem que você consulte dados e crie relatórios com eficiência.

Tipos de relações de tabela

Uma relação funciona fazendo a correspondência entre dados em colunas de chaves, geralmente colunas (ou campos) que têm o mesmo nome em ambas as tabelas. Na maioria dos casos, a relação conecta a chave primária ou a coluna de identificador exclusivo para cada linha de uma tabela a um campo em outra tabela. A coluna na outra tabela é conhecida como "chave estrangeira". Por exemplo, se você quiser acompanhar as vendas de cada título de livro, crie uma relação entre a coluna de chave primária (vamos chamá-la de title_ID) na tabela "Títulos" e uma coluna na tabela "Vendas" chamada title_ID. A coluna title_ID na tabela "Vendas" é a chave estrangeira.

Há três tipos de relações entre as tabelas. O tipo de relação criada depende de como as colunas relacionadas são definidas.

Relações de um para muitos

Uma relação de um para muitos é o tipo mais comum de relação. Nesse tipo de relação, uma linha na tabela A pode ter muitas linhas correspondentes na tabela B. Porém, uma linha na tabela B pode ter apenas uma linha correspondente na tabela A. Por exemplo, as tabelas "Editores" e "Títulos" têm uma relação de um para muitos. Ou seja, cada editora produz muitos títulos. Mas cada título vem de apenas um editor.

Uma relação de um para muitos será criada se apenas uma das colunas relacionadas for uma chave primária ou tiver uma restrição única.

Na janela de relação no Access, o lado da chave primária de uma relação de um para muitos é indicado pelo número 1. O lado da chave estrangeira de uma relação é indicado por um símbolo de infinito.

Captura de tela de um exemplo de relações do tipo um para muitos na janela de relações do Access.

Relações de muitos para muitos

Em uma relação de muitos para muitos, uma linha na tabela A pode ter muitas linhas correspondentes na tabela B e vice-versa. Você cria tal relação definindo uma terceira tabela chamada de tabela de junção. A chave primária da tabela de junção consiste nas chaves estrangeiras da tabela A e da tabela B. Por exemplo, a tabela "Autores" e a tabela "Títulos" têm uma relação de muitos para muitos que é definida por uma relação de um para muitos de cada uma dessas tabelas para a tabela "TitleAuthors". A chave principal da tabela "TitleAuthors" é a combinação da coluna au_ID (a chave principal da tabela "Autores" e da coluna title_ID (a chave principal da tabela "Títulos").

Captura de tela de um exemplo de relações do tipo muitos para muitos na janela de relações do Access.

Relações de um para um

Em uma relação de um para um, uma linha na tabela A não pode ter mais do que uma linha correspondente na tabela B e vice-versa. Uma relação um para um será criada se ambas as colunas relacionadas forem chaves primárias ou tiverem restrições únicas.

Esse tipo de relação não é comum, pois a maioria das informações relacionadas dessa forma estaria em uma tabela. Você pode usar uma relação de um para um para executar as seguintes ações:

  • Dividir uma tabela com muitas colunas.
  • Isolar parte de uma tabela por razões de segurança.
  • Armazenar dados de curta duração e que possam ser facilmente excluídos por meio da exclusão da tabela.
  • Armazenar informações que se aplicam apenas a um subconjunto da tabela principal.

No Access, o lado da chave primária de uma relação de um para um é indicado por um símbolo de chave. O lado da chave estrangeira também é indicado por um símbolo de chave.

Como definir relações entre tabelas

Quando você cria uma relação entre tabelas, os campos relacionados não precisam ter os mesmos nomes. No entanto, os campos relacionados devem ter o mesmo tipo de dados, a menos que o campo da chave primária seja um campo Numeração Automática. Você poderá combinar um campo Numeração Automática com um campo Número somente se a propriedade FieldSize de ambos os campos correspondentes for a mesma. Por exemplo, você poderá fazer a correspondência entre um campo Numeração Automática e um campo Número se a propriedade FieldSize de ambos os campos for Número Inteiro Longo. Mesmo quando ambos os campos correspondentes são campos Número, eles devem ter a mesma configuração de propriedade FieldSize.

Como definir uma relação de um para muitos ou de um para um

Para criar uma relação de um para muitos ou de um para um, siga estas etapas:

  1. Feche todas as tabelas. Você não pode criar nem alterar relações entre tabelas abertas.

  2. No Access 2002 ou no Access 2003, siga estas etapas:

    1. Pressione F11 para mudar para a janela do Banco de dados.
    2. No menu Ferramentas, clique em Relações.

    No Access 2007, Access 2010 ou Access 2013, clique em Relações no grupo Mostrar/Ocultar na guia Ferramentas de Banco de Dados.

  3. Se você ainda não definiu nenhuma relação em seu banco de dados, a caixa de diálogo Mostrar Tabela será exibida automaticamente. Se você quiser adicionar as tabelas que deseja relacionar, mas a caixa de diálogo Mostrar Tabela não for exibida, clique em Mostrar Tabela no menu Relações.

  4. Clique duas vezes nos nomes das tabelas que deseja relacionar e, em seguida, feche a caixa de diálogo Mostrar Tabela. Para criar uma relação entre uma tabela e ela mesma, adicione a tabela duas vezes.

  5. Arraste o campo que deseja relacionar de uma tabela para o campo relacionado na outra tabela. Para arrastar vários campos, pressione Ctrl, clique em cada campo e arraste-os.

    Na maioria dos casos, você arrasta o campo da chave primária (esse campo é exibido em texto em negrito) de uma tabela para um campo semelhante (esse campo frequentemente tem o mesmo nome), que é chamado de chave estrangeira na outra tabela.

  6. A caixa de diálogo Editar Relações é exibida. Verifique se os nomes de campo exibidos nas duas colunas estão corretos. Você pode mudar os nomes se for necessário.

    Defina as opções de relação se for necessário. Se você precisar de informações sobre um item específico na caixa de diálogo Editar Relações, clique no botão com o ponto de interrogação e, em seguida, clique no item. (Essas opções serão explicadas em detalhes posteriormente neste artigo.)

  7. Clique em Criar para criar a relação.

  8. Repita as etapas de 4 a 7 para cada par de tabelas que você deseja relacionar.

    Ao fechar a caixa de diálogo Editar Relações, o Access pergunta se você quer salvar o layout. Independentemente de você salvar o layout, as relações que você cria são salvas no banco de dados.

    Observação

    Você pode criar relações não apenas em tabelas, mas também em consultas. No entanto, a integridade referencial não é aplicada com consultas.

Como definir uma relação de muitos para muitos

Para criar uma relação de muitos para muitos, siga estas etapas:

  1. Crie as duas tabelas que terão uma relação de muitos para muitos.

  2. Crie uma terceira tabela. Esta é a tabela de junção. Na tabela de junção, adicione novos campos que tenham as mesmas definições dos campos de chave primária de cada tabela que você criou na etapa 1. Na tabela de junção, os campos de chave primária funcionam como chaves estrangeiras. Você pode adicionar outros campos à tabela de junção, assim como pode fazer com qualquer outra tabela.

  3. Na tabela de junção, defina a chave primária para incluir os campos de chave primária das outras duas tabelas. Por exemplo, em uma tabela de junção "TitleAuthors", a chave primária seria composta pelos campos OrderID e ProductID.

    Observação

    Para criar uma chave primária, siga estas etapas:

    1. Abra uma tabela na exibição Design.

    2. Selecione o campo ou campos que deseja definir como a chave primária. Para selecionar um campo, clique no seletor de linha do campo desejado. Para selecionar vários campos, mantenha a tecla Ctrl pressionada e clique no seletor de linha para cada campo.

    3. No Access 2002 ou no Access 2003, clique em Chave Primária na barra de ferramentas.

      No Access 2007, clique em Chave Primária no grupo Ferramentas na guia Design.

      Observação

      Se você quiser que a ordem dos campos em uma chave primária de vários campos seja diferente da ordem desses campos na tabela, clique em Índices na barra de ferramentas para exibir a caixa de diálogo Índices e, em seguida, reordene os nomes de campo para o índice chamado PrimaryKey.

  4. Defina uma relação de um para muitos entre cada tabela primária e a tabela de junção.

Integridade referencial

A integridade referencial é um sistema de regras que o Access usa para garantir que as relações entre registros em tabelas relacionadas sejam válidas e que você não exclua nem altere acidentalmente dados relacionados. Você pode definir a integridade referencial quando todas as seguintes condições são verdadeiras:

  • O campo de correspondência da tabela primária é uma chave primária ou tem um índice exclusivo.
  • Os campos relacionados têm o mesmo tipo de dados. Há duas exceções. Um campo AutoNumber pode estar relacionado a um campo Número que tem uma configuração de propriedade FieldSize de Número Inteiro Longo, e um campo AutoNumber que tem uma configuração FieldSize de propriedade de ID de Replicação pode estar relacionado a um campo Número que tem uma configuração de propriedade FieldSize de ID de Replicação.
  • Ambas as tabelas pertencem ao mesmo banco de dados do Access. Se as tabelas estiverem vinculadas, deverão ser tabelas no formato do Access, e você deverá abrir o banco de dados no qual elas estão armazenadas para definir a integridade referencial. A integridade referencial não pode ser aplicada a tabelas vinculadas de bancos de dados em outros formatos.

As seguintes regras se aplicam quando você usa a integridade referencial:

  • Você não pode inserir um valor no campo de chave estrangeira da tabela relacionada que não exista na chave primária da tabela primária. No entanto, você pode inserir um valor Nulo na chave estrangeira. Isso especifica que os registros não estão relacionados. Por exemplo, você não pode ter um pedido que é atribuído a um cliente que não existe. No entanto, você pode ter um pedido que não seja atribuído a ninguém, inserindo um valor Nulo no campo CustomerID.
  • Não será possível excluir um registro de uma tabela primária se existirem registros correspondentes em uma tabela relacionada. Por exemplo, você não poderá excluir um registro de funcionário da tabela "Funcionários" se houver pedidos atribuídos ao funcionário na tabela "Pedidos".
  • Você não pode alterar um valor de chave primária na tabela primária se esse registro tiver registros relacionados. Por exemplo, você não poderá alterar a ID de um funcionário na tabela "Funcionários" se houver pedidos atribuídos a esse funcionário na tabela "Pedidos".

Atualizações e exclusões em cascata

Para relações às quais a integridade referencial é imposta, você pode especificar se deseja que o Access atualize ou exclua em cascata automaticamente os registros relacionados. Se você definir essas opções, a exclusão e a atualização das operações que geralmente seriam impedidas pelas regras de integridade referencial serão habilitadas. Quando você exclui registros ou altera valores de chave primária em uma tabela primária, o Access faz as alterações necessárias nas tabelas relacionadas para preservar a integridade referencial.

Se você clicar para marcar a caixa de seleção Propagar Atualização dos Campos Relacionados ao definir uma relação, sempre que você alterar a chave principal de um registro na tabela principal, o Microsoft Access atualizará automaticamente a chave principal para o novo valor em todos os registros relacionados. Por exemplo, se você alterar a ID de um cliente na tabela "Clientes", o campo CustomerID na tabela "Pedidos" será automaticamente atualizado para cada um dos pedidos desse cliente para que a relação não seja rompida. O Access atualiza em cascata sem exibir nenhuma mensagem.

Observação

Se a chave principal na tabela principal for um campo AutoNumber, marcar a caixa de seleção Propagar Atualização dos Campos Relacionados não terá efeito, pois você não pode alterar o valor em um campo AutoNumber.

Se você marcar a caixa de seleção Propagar Exclusão dos Registros Relacionados quando definir uma relação, sempre que você excluir registros na tabela principal, o Access excluirá automaticamente registros relacionados na tabela relacionada. Por exemplo, se você excluir um registro de cliente da tabela "Clientes", todos os pedidos do cliente serão automaticamente excluídos da tabela "Pedidos". (Isso inclui registros na tabela "Detalhes do Pedido" relacionados aos registros "Pedidos"). Ao excluir registros de um formulário ou folha de dados quando a caixa de seleção Propagar Exclusão dos Registros Relacionados está marcada, o Access avisa que os registros relacionados também podem ser excluídos. No entanto, quando você exclui registros usando uma consulta de exclusão, o Access exclui automaticamente os registros em tabelas relacionadas sem exibir um aviso.

Tipos de junção

Há três tipos de junção. Eles podem ser vistos na seguinte captura de tela:

Captura de tela das Propriedades da Junção, que mostra três tipos de junção.

A opção 1 define uma junção interna. Uma junção interna é uma junção na qual os registros de duas tabelas são combinados nos resultados de uma consulta somente se os valores nos campos unidos atendem a uma condição especificada. Em uma consulta, a junção padrão é uma junção interna que seleciona registros somente se os valores nos campos unidos são correspondentes.

A opção 2 define uma junção externa esquerda. Uma junção externa esquerda é uma junção na qual todos os registros do lado esquerdo da operação LEFT JOIN na instrução SQL da consulta são adicionados aos resultados da consulta, mesmo que não haja valores correspondentes no campo unido da tabela no lado direito.

A opção 3 define uma junção externa direita. Uma junção externa direita é uma junção na qual todos os registros do lado direito da operação RIGHT JOIN na instrução SQL da consulta são adicionados aos resultados da consulta, mesmo que não haja valores correspondentes no campo unido da tabela no lado esquerdo.