1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Base de Dados: Relação 1 para N

Discussão em 'Programação' iniciada por ticoo-pt, 9 de Agosto de 2009. (Respostas: 20; Visualizações: 4367)

  1. ticoo-pt

    ticoo-pt Power Member

    Boas.

    Estou a fazer uma base de dados em que se se encontram os dados dos clientes, numa tabela, e o histórico de contacto com os clientes numa outra tabela. Existem vários clientes, como é obvio, e cada cliente pode ter zero ou mais ítens no seu histórico de contactos.

    Neste caso, existe uma relação de 1-para-N, sem obrigatoriedade do lado N, existindo três tabelas, uma dos clientes, uma do histórico, e uma com as chaves primárias de cada das outras tabelas, certo?

    Obg. ;)
     
  2. Sam19

    Sam19 Power Member

    Boas,

    Penso que não será necessário. A tabela do lado N fica com a chave estrangeira.
     
  3. K0mA

    K0mA Power Member

    fonte http://www.di.uevora.pt/~tcg/ensino/imd0405/access.pdf
     
  4. ticoo-pt

    ticoo-pt Power Member

  5. K0mA

    K0mA Power Member

    Apenas tentei ajudar...
     
  6. A tabela de Clientes fica com a chave primária...

    A tabela contactos fica com a chave estrangeira.

    E depois fazes uma relação 1-N

    (N pode ser de 0 a praticamente infinito)
     
  7. ticoo-pt

    ticoo-pt Power Member

    Claro que sim... E agradeço bastante! Só que me ao ler este caso fiquei confuso em relação aos conhecimentos que tenho.
    Mas agradeço a tua ajuda!!! ;)

    OK eu estava a fazer assim, mas ocorreu um erro que agora já não me lembro de relação das tabelas quando estava a inserir o histórico, mas logo ja vejo e digo qualquer coisa... ;)
     
    Última edição pelo moderador: 11 de Agosto de 2009
  8. ticoo-pt

    ticoo-pt Power Member

    Já experimentei.

    Coloquei a chave primária da tabela Clientes na tabela Histórico.

    Agora estou a fazer os formulários com o Assistente de formulários.
    Adiciono os campos que quero, ver os dados por cliente e em formulários ligados.
    Agora acontece que quando adiciono dados no histórico, estes não são guardados na tabela histórico, nem em lado nenhum. O que estou a fazer mal?

    Obrigado. ;)
     
  9. ticoo-pt

    ticoo-pt Power Member

    Outro erro:
    "Não é possível adicionar ou alterar um registo pois é necesário um registo relacionado na tabela 'Clientes'."
    Isto ainda decorrente do problema acima.
     
  10. jahred

    jahred Power Member

    O cliente está criado antes de preencher a tabela do histórico? Esse erro normalmente é disso.
    Se te estiver a dar erro a criar as relações, primeiro esvazia as tabelas, depois cria as relações, depois cria os clientes, depois cria os históricos para esses clientes.
     
  11. ticoo-pt

    ticoo-pt Power Member

    Está criado antes, sim.
     
  12. jahred

    jahred Power Member

    tens 2 tabelas, a tabela clientes e a tabela histórico. A tabela clientes tem como chave primaria o campo "codigo_cliente", a tabela historico tem como chave estrangeira o "codigo_cliente", e como primaria o "codigo_historico". Crias as relações de 1 para 0..N. Crias os clientes. Crias os historicos para esses clientes.
    Estás a fazer isto?
     
  13. ticoo-pt

    ticoo-pt Power Member

    sim, mas vou fazer tudo de novo a ver se me enganei em alguma coisa.
    obrigado
     
  14. ticoo-pt

    ticoo-pt Power Member

    epa estou mm a sentir.me ignorante...

    Fiz isso tudo, depois fiz um formulário com o assistente, com o formulario historico ligado ao formulário clientes.
    faço um cliente. clico em historico. abre o formulario historico numa nova janela. escrevo quanquer coisa e aparece:

    you cannot add or change a record because a related record is requires in table 'clientes'.

    esta aqui um exemplo de como estou a fazer as relações:

    [​IMG]
     
  15. ticoo-pt

    ticoo-pt Power Member

    vou ter de dar a volta a isto de outra maneira. estou a fazer aqui qualquer coisa mail mas não consigo perceber o que.
     
  16. jahred

    jahred Power Member

    experimenta por os dados à pata, sem usar formulários. preenche primeiro a tabela clientes e depois a tabela históricos... deve dar, certo?
    o problema deve tar no formulário... penso eu, pois já não mexo com access há um bom par de anos...
     
  17. ticoo-pt

    ticoo-pt Power Member

    penso que da... acho q ja experimentei. o problema e q a la pata perde o sentido da base de dados...
     
  18. Pelo que entendi, existem clientes e contactos e queres guardar dados relativamente ao histórico de contactos de cada cliente certo? Suponho que cada cliente pode ter um ou mais contactos em comum.
    Então para mim a maneira correcta de fazer isso é:

    -Existiram 3 tabelas (cliente, contactos e historico) estas terão as seguintes relações Cliente(1) - (N)Historico(N) - (1)Contactos

    - Chaves primárias(PK):
    Tabela Cliente - PK (id_cliente)
    Tabela Contactos - PK (id_contacto)
    Tabela Historico - PK (id_cliente, id_contacto) vai ser uma chave primária dupla.
    Não existiram chaves secundárias.

    -Depois como em qq base de dados... existem dados que deverão à partida estar inseridos. Neste caso terão que existir já alguns clientes e contactos.
     
  19. boas pessoal
    gostaria que me respondessem...a uma dúvida que tenho.
    nas relações no acess, o que significa uma relação de um-para-zero, e podem-me dar um exemplo??
    Agradecia que me esclarecessem.
    Obrigado
    Cumprimentos
     
  20. boas.

    não é necessario criares 3 tabelas para teres um historico de contactos de clientes, excepto, tiveres uma tabela com uma chave primária para o tipo de contacto, isto é, por exemplo: 1 - Informações ; 2 - Inscrição ; 3 - Anulação Inscrição.

    Neste caso especifico, o que irás ter na tua tabela de Histórico será algo como : Cliente 1 , Informações, Data . Cliente 1 , Inscrição, Data.

    Caso não tenhas esta tabela de códigos para tipo de contacto, ou seja, não te interesse qual o tipo de contacto existente no passado, mas apenas uma data, o irás ter será algo como Cliente 1 , Contacto dia X ; Cliente 1 , Contacto dia Y. Aqui podes utilizar a data como chave composta juntamente com o cliente (chave estrangeira relativa á tabela cliente).

    Resumindo, tens 2 hipoteses para o fazer :
    1 - Existencia de tabela de Tipo de Contacto -> a tabela histórico ficará com uma chave de 3 ou mais variaveis , partindo do pressuposto que um cliente poderá fazer o mesmo tipo de contacto várias vezes.
    2 - Não existencia de tabela de tipo de contactos -> a tabela histórico ficará com uma chave de 2 ou mais variaveis, partindo do pressuposto que utilizarás uma data de contacto para não poderes ter duplicados na tabela.

    Qualquer dúvida avisa.

    JTMartins
     

Partilhar esta Página