Compartilhar via


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

Observação

Novato: requer conhecimento da interface do usuário em computadores de usuário único. Este artigo se aplica somente 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 inclui:

  • O que são relações de tabela?
  • Tipos de relações de tabela
    • Relacionamento um para muitos
    • Relacionamentos de muitos para muitos
    • Relações um-para-um
  • Como definir relações entre tabelas
    • Como definir uma relação um-para-muitos ou um-para-um
    • Como definir uma relação 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 evitar dados redundantes. Por exemplo, se você estiver criando um banco de dados que rastreia informações sobre livros, poderá ter uma tabela chamada "Títulos" que armazena informações sobre cada livro, como o título do livro, a data da publicação e o publicador. Há também informações que talvez você queira armazenar sobre o publicador, como o número de telefone, o endereço e o CEP/CEP do editor. Se você armazenar todas essas informações na tabela "Títulos", o número de telefone do editor será 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 chamada "Publishers". Em seguida, você colocaria um ponteiro na tabela "Títulos" que faz referência a uma entrada na tabela "Publishers".

Para garantir que seus dados permaneçam sincronizados, você pode impor a integridade referencial entre tabelas. As 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 "Publishers". Um título não pode ser adicionado ao banco de dados para um publicador que não existe no banco de dados.

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

Tipos de relações de tabela

Uma relação funciona combinando dados em colunas de chave, 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 do 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" nomeada title_ID. A coluna title_ID na tabela "Vendas" é a chave estrangeira.

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

Relacionamento um para muitos

Uma relação 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. Mas uma linha na tabela B pode ter apenas uma linha correspondente na tabela A. Por exemplo, as tabelas "Publishers" e "Titles" têm uma relação um-para-muitos. Ou seja, cada editor produz muitos títulos. Mas cada título vem de apenas um editor.

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

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

Captura de tela de um exemplo de relações um-para-muitos na janela de relações no Access.

Relacionamentos de muitos para muitos

Em uma relação muitos-a-muitos, uma linha na tabela A pode ter muitas linhas correspondentes na tabela B e vice-versa. Você cria essa relação definindo uma terceira tabela que é 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 muitos para muitos definida por uma relação um-para-muitos de cada uma dessas tabelas com a tabela "TitleAuthors". A chave primária da tabela "TitleAuthors" é a combinação da coluna au_ID (a chave primária da tabela "Authors") e a coluna title_ID (a chave primária da tabela "Títulos").

Captura de tela de um exemplo de relacionamentos muitos-para-muitos na janela de relacionamentos no Access.

Relações um-para-um

Em uma relação um-para-um, uma linha na tabela A não pode ter mais de 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 exclusivas.

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

  • Divida uma tabela com muitas colunas.
  • Isole parte de uma tabela por motivos de segurança.
  • Armazene dados de curta duração e que podem ser facilmente excluídos excluindo a tabela.
  • Armazene informações que se aplicam apenas a um subconjunto da tabela principal.

No Access, o lado da chave primária de uma relação 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 de chave primária seja um campo Numeração Automática. Você pode associar um campo de Numeração Automática com um campo de Número somente se a propriedade TamanhoDoCampo de ambos os campos correspondentes for igual. Por exemplo, você pode corresponder a um campo Numeração Automática e a um campo Número se oFieldSizeproperty de ambos os campos for IntegerLong. Mesmo quando ambos os campos correspondentes são campos numéricos, eles devem ter a mesma configuração para a propriedade de tamanho do campo.

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

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

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

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

    1. Pressione F11 para alternar para a janela 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 no 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 aparecer, clique em Mostrar Tabela no menu Relações .

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

  5. Arraste o campo que você deseja relacionar de uma tabela ao 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 de 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 alterar os nomes se necessário.

    Defina as opções de relação se for necessário. Se você precisar ter informações sobre um item específico na caixa de diálogo Editar Relações , clique no botão de ponto de interrogação e clique no item. (Essas opções serão explicadas detalhadamente mais adiante 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.

    Quando você fecha a caixa de diálogo Editar Relações , o Access pergunta se você deseja salvar o layout. Se você salvar o layout ou não salvar o layout, as relações criadas serã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 é imposta com consultas.

Como definir uma relação muitos para muitos

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

  1. Crie as duas tabelas que terão uma relação 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 que os 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, da mesma forma que pode para 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 no modo Design.

    2. Selecione o campo ou os campos que você 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 pressionada a tecla Ctrl 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 difere 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 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 ou altere dados relacionados acidentalmente. Você pode definir a integridade referencial quando todas as seguintes condições forem 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 Numeração Automática pode estar relacionado a um campo Número que tem uma FieldSize configuração de propriedade de Inteiro Longo e um campo Numeração Automática que tem uma FieldSize configuração de propriedade de ID de Replicação pode estar relacionado a um campo Número que tem uma FieldSize configuração de propriedade de ID de Replicação.
  • Ambas as tabelas pertencem ao mesmo banco de dados do Access. Se as tabelas forem tabelas vinculadas, elas deverão ser tabelas no formato Access e você deverá abrir o banco de dados no qual elas são armazenadas para definir a integridade referencial. A integridade referencial não pode ser imposta para tabelas vinculadas de bancos de dados em outros formatos.

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

  • Não é possível inserir um valor no campo de chave estrangeira da tabela relacionada que não existe 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 atribuído a um cliente que não existe. No entanto, você pode ter um pedido atribuído a ninguém inserindo um valor Nulo no campo CustomerID .
  • Você não poderá excluir um registro de uma tabela primária se houver registros correspondentes em uma tabela relacionada. Por exemplo, você não poderá excluir um registro de funcionário da tabela "Funcionários" se houver ordens atribuídas ao funcionário na tabela "Pedidos".
  • Você não poderá 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 ordens atribuídas a esse funcionário na tabela "Pedidos".

Atualizações e exclusões em cascata

Para relações nas quais a integridade referencial é imposta, você pode especificar se deseja que o Access atualize automaticamente ou exclua registros relacionados em cascata. Se você definir essas opções, as operações de exclusão e atualização que normalmente seriam impedidas por 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 selecionar a caixa de seleção Campos Relacionados da Atualização em Cascata ao definir uma relação, sempre que você alterar a chave primária de um registro na tabela primária, o Microsoft Access atualizará automaticamente a chave primária 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á atualizado automaticamente para cada um dos pedidos desse cliente para que a relação não seja interrompida. Acessar atualizações em cascata sem exibir nenhuma mensagem.

Observação

Se a chave primária na tabela primária for um campo Numeração Automática, a seleção da caixa de seleção Campos Relacionados à Atualização em Cascata não terá efeito porque você não pode alterar o valor em um campo Numeração Automática.

Se você selecionar a caixa de seleção Excluir Registros Relacionados em Cascata ao definir uma relação, sempre que você excluir registros na tabela primária, o Access excluirá automaticamente os registros relacionados na tabela relacionada. Por exemplo, se você excluir um registro de cliente da tabela "Clientes", todos os pedidos do cliente serão excluídos automaticamente da tabela "Pedidos". (Isso inclui registros na tabela "Detalhes do Pedido" relacionados aos registros "Pedidos"). Quando você exclui registros de um formulário ou folha de dados quando a caixa de seleção Excluir Registros Relacionados em Cascata é selecionada, 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. Você pode vê-los na seguinte captura de tela:

Captura de tela das Propriedades de 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 atenderem 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 corresponderem.

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.