Relacionamentos numa base de dados

Depois de ter estabelecido diferentes tabelas para cada assunto na sua base de dados, você precisa de uma maneira de informar ao Microsoft Access como reunir novamente essas informações. O primeiro passo nesse processo é definir os relacionamentos entre as suas tabelas. Depois de ter feito isso, você pode criar consultas, formulários e relatórios para exibir informações provenientes de várias tabelas de uma vez.

Como funcionam os relacionamentos?

Um relacionamento um-para-muitos
O relacionamento um-para-muitos é o tipo mais comum de relacionamento. Num relacionamento um-para-muitos, um registo na Tabela A pode ter muitos registos coincidentes na Tabela B, mas um registo na Tabela B tem um só registo coincidente na Tabela A.

Um relacionamento muitos-para-muitos
Num relacionamento muitos para-muitos, um registo na Tabela A pode ter muitos registos coincidentes na Tabela B, e um registo na Tabela B pode ter muitos registos coincidentes na Tabela A. Esse tipo de relacionamento só é possível definindo-se uma terceira tabela (denominada tabela de associação) cuja chave primária consista em dois campos as chaves estrangeiras provenientes tanto da Tabelas A como da B. Na verdade, um relacionamento muitos-para-muitos são dois relacionamentos um-para-muitos com uma terceira tabela. Por exemplo, a tabela Pedidos e a tabela Produtos têm um relacionamento muitos-para-muitos que é definido criando-se dois relacionamentos um-para-muitos para a tabela Detalhes do Pedido.

Um relacionamento um-para-um
Em um relacionamento um-para-um, cada registo na Tabela A pode ter somente um registo coincidente na Tabela B, e cada registo na Tabela B pode ter somente um registo coincidente na Tabela A. Esse tipo de relacionamento não é comum, pois a maioria das informações assim relacionadas estaria em uma só tabela. A utilização de um relacionamento um-para-um é recomendada quando você deseja dividir uma tabela com muitos campos, isolar parte de uma tabela por segurança ou armazenar informações que se apliquem somente a um subconjunto da tabela principal. Pode ser que você queira, por exemplo, criar uma tabela para registar os funcionários que participam de um jogo de futebol para levantamento de fundos.

Definindo relacionamentos
Você define um relacionamento adicionando as tabelas que deseja relacionar com a janela Relacionamentos e, em seguida, arrastando o campo chave de uma tabela e soltando-o no campo chave da outra tabela.
A espécie de relacionamento que o Microsoft Access cria depende de como os campos relacionados são definidos:
• Um relacionamento um-para-muitos é criado quando somente um dos campos relacionados é uma chave primária ou tem um índice exclusivo.
• Um relacionamento um-para-um é criado quando ambos os campos relacionados são chaves primárias ou têm índices exclusivos.
• Na verdade, um relacionamento muitos-para-muitos são dois relacionamentos um-para-muitos com uma terceira tabela cuja chave primária consiste em dois campos  as chaves estrangeiras das outras duas tabelas.
Observação Se você arrastar um campo que não seja uma chave primária e que não tenha um índice exclusivo para um outro campo que não seja uma chave primária e não tenha um índice exclusivo, será criado um relacionamento indeterminado. Em consultas que contenham tabelas com um relacionamento indeterminado, o Microsoft Access exibe uma linha de associação padrão entre as tabelas, mas a integridade referencial não é imposta e não há garantia de que os registos sejam exclusivos em cada tabela.

  • Ana Fortunato

    Bom dia!
    Estou a desenvolver uma BD sobre a Formação Profissional realizada pelos funcionários, onde possa retirar o Plano de formação anual.
    em termos de relacionamento pretendo que uma acção de formação possa ser realizada por mais do que um funcionário e um funcionário possa realizar mais do que uma acção de formação. Penso que seja um relacionamento muitos para muitos.
    Tenho uma tabela para os funcionários e uma tabela para as acções de formação, tenho ainda uma tabela Plano onde a chave primária de funcionário e a chave primária de acção de formação são a chave estrangeira.
    Gostava de alguns esclarecimentos sobre esta relação porque estou a encontrar algumas dificuldades na construção de formulários com campos de tabelas relacionadas com estas tabelas principais.

    Obrigada pela atenção que a minha questão possa merecer

    Ana Fortunato

    • http://www.accessexemplos.com Administrador

      Boa Noite Ana,

      Pelo que me diz já conhece o funcionamento das relações muitos-para-muitos, mas na prática é que as coisas não estão a funcionar.

      Com os dados que me deu não posso responder sem saber quais as chaves que escolheu e como estão relacionadas as tabelas. De qualquer forma este exemplo: DVD-Muitos para muitos utiliza uma relação muitos para muitos em que existem muitos DVDs e muitos Actores. Temos uma tabela de DVDs e uma tabela de Actores e uma tabela que faz a união utilizando as chaves de cada uma das tabelas.

      Para melhor entender faça o download e estude o exemplo. Se quiser disponibilizar o seu exemplo para eu ver o que está mal. Diga o que está a tentar fazer e não consegue que eu digo o que está mal.

  • Edson

    Boa noite, tenho a seguinte situação, estou desenvolvendo um banco de dados e encontrei dificuldades para fazer um registro na tabela x ter muitos registros na tabela y por ex. cadastro de funcionários nome do func em uma tabela e na outra horários, como registrar no nome do func x todos horarios do mês? fiz uma consulta colocando nome do func e seus horarios, na hora de cadastrar o primeiro registro ok qdo vou para o segundo registro ele muda para o func y espero ter expressado o problema corretamente e aguardo a ajuda . Sem mais agradeço.

    • http://www.accessexemplos.com Administrador

      Só com estes dados não vejo qual o problema. Presumo que tenha um formulário em que quer introduzir o nome do funcionário e um sub formulário em que vai introduzir o horário, certo? Agora não estou a perceber o que quer dizer que ele muda o nome do funcionário no segundo registo!!!!
      Se me puder enviar o formulario em causa com as tabelas/consultas do qual depende talvez eu consiga perceber melhor qual a sua dúvida.

      Pode também ver o seguinte exemplos que trabalha com horários e ver se ajuda em alguma coisa.

      http://www.accessexemplos.com/ponto/

  • Maggio

    Saudações:)

    De momento estou com um ligeiro problema! Tenho pela primeira vez uma disciplina de Base de dados na licenciatura que estou a tirar e tenho como trabalho prático fazer uma base de dados em Access! Eu escolhi como tema realizar a base de dados de um armazém já que estou a tirar o curso de Logística! Tenho a perfeita noção do que quero mas não consigo implementar a minha ideia em Access daí que precisava de uma pequena ajudinha:)

    Vou passar a citar a minha ideia:

    A minha base de dados regista todos os meus fornecedores e clientes, e regista cada compra que faça a um fornecedor(entrada de produto) bem como cada venda que faça a um cliente(saída de produto), (com modelos de pagamento diferentes, inclusive o crédito e o pronto pagamento), e essas compras e essas vendas deverão automaticamente diminuir ou aumentar o meu stock de produto que terá um determinado preço. Depois cada produto deverá ter uma localização específica no armazém, ficando essa localização vazia quando vendo o último produto de cada referência. No geral teria no armazém 500 referências, e 25 produtos de cada referência!

    E até agora consegui fazer isto:

    tblLocalizacoes
    Não sei que atributos colocar aqui

    tblProdutos
    Código Produto – Chave primária
    Descrição
    Quantidade
    Preço Unitário Compra
    Preço Unitário de Venda

    tblStock
    Não sei que atributos colocar aqui

    tblRecepcao
    Factura Nº – Chave Primária
    Fornecedor
    Numero de Identificação Fiscal
    Produto
    Quantidade
    Preço Unitário Compra

    tblExpedicao
    Factura Nº – Chave Primária
    Cliente
    Numero de Identificação Fiscal
    Produto
    Quantidade
    Preço Unitário de Venda

    tblFornecedores
    Código de Fornecedor – Chave Primária
    Nome
    Numero de Identificação Fiscal
    Morada
    Telefone
    E-mail

    tblClientes
    Código de Cliente – Chave Primária
    Nome
    Numero de Identificação Fiscal
    Morada
    Telefone
    E-mail

    O problema agora reside em como fazer as relações e que dados colocar nas tabelas que não têm nada!!!???

    Agradeço desde já toda a ajuda possivel:)

  • ANA

    BOA NOITE!

    ESTOU TENTANDO FAZER UM RELACIONAMENTO ENTRE TABELAS. aLGO COMO DIGITAR UM CEP NO ATO DO CADASTRO E JÁ APARECER PRA MIM A CIDADE RELACIONADA A ESTE CEP.
    SERÁ QUE PODERIA ME AJUDAR?
    ATENCIOSAMENTE
    ANA

  • Vitorio

    Olá, minha dúvida é similar à da Ana, tenho uma tabela com nome e endereço de clientes. Quero que, em um formulário, ao introduzir o nome, automaticamente apareça o endereço em outro campo.
    Obrigado.

  • Ana Fortunato

    agredeço a colaboração

    =D

    Beijaooooo

    <3

  • carla

    Boa Tarde.

    A minha duvida é a seguinte :

    Ja construi praticamente toda a base de dados.
    Mas o k me acontece é k num dos meus forms, onde tenho uma combo box que abre o tipo de software da empresa e por conseguinte a versão relacionada com cada tipo de software, ao introduzir novos dados de um novo cliente directamente a partir do form, não consigo gravar esses records.

    Como faço para k todos os novos dados k introduzo fiquei automaticamente gravados ?

    Obrigado

  • Lauro

    Tenho 40 itens. Como fazer que no relatório do access fiquem 20 itens numa coluna e 20 em outra?

  • anderson

    Olá bom dia!

    estou com uma duvida, trabalho com muitos fornecedores mas existe +ou- 6 fornecedores que tenho que acompanhar diariamente para devolver os produtos para eles e no caso eu não lembro como eu faço para me mostrar num relatorio todos eles só que eu quero que no relatorio separe cada fornecedor e nessa separação me mostre o valor total de cada um para devolver em dinheiro entendeu? No caso para cada fornecedor tenho varios produtos com os valores de cada produtos e o que eu quero é isso que no relatorio me mostre os fornecedores separados e para cada fornecedor o valor total! estarei no aguardo

  • CAMILLA RODRIGUES

    Boa tarde!
    Adoreii o conteúdo me ajudou a fazer meu trabalho de BD..mas ainda tenho uma dúvida.Gostaria muito de saber o que significa (1,1 e 0,n),pois meu professor passou um desenho onde tinha um relacionamento de 8 tabelas e amabas havia 1,1 e 0,n.
    Por favor me ajude o amis rapido se for possivel..porque estou dependendo muito de sua resposta.
    Obrigadaa!
    Fica com Deus,bjoO.

  • JORGE

    1,1 Significa que ao MENOS um registro da tabela está relacionada a 1 registro de outra.
    Exemplo: 1 Pessoa tem 1 e SOMENTE um RG, normalmente quando temos este tipo de relacionamento podemos transformá-lo em atributo.

    0,n Significa que pode-se ter 0 ou mais registros no relacionamento entre as tabelas.
    Exemplo: Empregados – gerenciam – projetos
    Podemos ter 0 ou mais empregados no mínimo para n projetos diferentes.

    Qlqr coisa taí meu email: instrutor_jorge@hotmail.com

  • Bruno

    Olá! Gostaria de saber como poderei criar a página principal da aplicação e como liga-la às outras páginas?

    Cumps

  • Lili

    Quero que em um formulário, ao introduzir a matricula de um colaborador, automaticamente apareça o nome a função em outro campo.

  • Jair

    Ola Pessoal, bom dia, solicito ajuda no seguinte caso:
    estou desenvolvendo um controle de estoque aqui na Empresa, tenho 03 tabelas, uma de produtos, uma de entrada e outra de saida das peças do estoque, o problema não estou conseguindo que fique atualizado o total do estoque na tabela de produtos. tenho que acumular e mostrar o total do estoque na tabela (FRM) produtos. agradeço toda ajuda. Obrigado.
    abs

  • rogerio munhangane

    Bom dia
    Sou estudante finalista do curso de bacharelado e licencitura em estatistica e gestao de informacao, tou a tentar desenvolver uma base de dados para gestao de um fundo que o governo aloca aos distritos, para facilitar o acesso rapido e melhor gestao dos dados que o distrito tem neste processo.

    Assim, gostaria de ter vosso apoio para desenvolver esta base usando o visual basic, Acess ou excel.

    Obrigado
    Rogerio
    Mocambique

  • http://www.deiseajala.blogspot.com Deise

    Bom dia!

    Por favor, alguém poderia me ajudar? Já fiz um banco de dados e agora percebi que faltou fazer relacionamentos entre as tabelas, acho que agora já é tarde pq eu já fiz todos os formulários. O problema é que quando “estou” no aluno 3 e clico em um botão que abre o formulário “endereço”, vai para o aluno 1. Eu queria que abrisse os dados pessoais no formulário principal e que quando eu clicasse em um botão “endereço” fosse para o endereço do aluno que eu estou olhando os dados principais. Se alguém puder me ajudar eu ficarei muito feliz! Posso até mandar o banco de dados que eu fiz pra vcs darem uma olhadinha.
    Estou fazendo tudo sozinha, não tenho nenhum professor para me ajudar no momento…
    Um abraço!
    Deise

  • AC Manuel

    Dei uma leitura a respeito da minha questão e não intendi mesmo nada.
    Logo, se que tems videos a respeito da minha situação agradeceria que me mande-se no meu e-mail

    tonyacmanuel@hotmail.com

    Atenciosamente
    AC Manuel

  • JMarcelo

    Olá, parabéns pelo post.
    Tenho um problema e não sei como resolvê-lo. Tenho um banco de dados com dados de dois países diferentes, os questionários de coleta de dados têm basicamente as mesmas informações, porém algumas adequações tiveram que ser feitas tais como classes de renda, escolaridade e hábitos individuais. Minha entrada de dados é única, tenho menu e escolho quais os formularios que vou fornecer os dados, cada individuo fornece os dados de todos os formulários.
    O primeiro formulário é o menu onde atribuo a chave para todos os dados de cada indivíduo, que é passada para cada um dos formulários e suas tabelas associadas (de atividades passadas, condições físicas, Identificação etc.).
    O problema é que quando passo do segundo formulário (identificação-dados do sujeito) para o terceiro formulário (descrição de atividades atuais diárias) o Access dá um erro e me informa que tenho que ter um registro associado na tabela de identificação da minha amostra de estrangeiros a única que tem dados diferentes das damais por causa das características particulares de cada população analisada.
    Qual maneira eu poderia utilizar a relação entre as tabelas e suas respectivas integridades relacionais de forma que, houvesse duas tabelas diferentes com dados de identificação da amostra nacional e outra para a amostra estrangeira e outras dez tabelas cujos campos são os mesmos para as duas amostras? Em cada tabela há apenas um registro relacionado a um registro na tabela de identificação.
    Muito obrigado.
    Marcelo

  • http://facebook joão fidalgo

    Tenho o projecto de criação de um SCA(sistema de cadastramento de alunos),tenho três tabelas uma tabela principal com os dados pessoais, certidão de nascimeto endereço, naturalidade e dados escolares, cujo chave prímaria é Nume aluno; e a outra tabela é a tabela cursos, onde contém todos os cursos da referida instituição, a outra tabela é designada Classe,onde existe todas as classe da escola.
    defino um relacionamento da tal maneira Nome aluno entidade primaria na tabela principal, e os campos das ouras tabelas que tipo de relacionamento é?