Base de Dados: Relação 1 para N

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. ;)
 
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)
 
Apenas tentei ajudar...

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!!! ;)

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)

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:
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. ;)
 
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.
 
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.
 
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.

Está criado antes, sim.
 
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?
 
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:

 
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...
 
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.
 
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
 
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
 
Back
Topo