Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renato Augusto

[Resolvido] Criar Relacionamento

Recommended Posts

Olá amigos,

 

Estou me aventurando agora pelo mundo dos relacionamentos e estou com uma dúvida. Utilizando o MySQL Workbench criei o banco da imagem abaixo, porém quero fazer os relacionamentos. Pensando nisso em cada tabela criei um novo campo chamado Usuario que deve receber o id do usuário da tabela Usuarios.

 

2012_05_01_01h09_51.png

 

 

O objetivo é poder saber de quem cada dado pertence, ou seja, se quero o endereço do usuário 1 basta ir na tabela Endereco e selecionar os dados assim:

 

SELECT * FROM Endereco WHERE Usuario = 1

 

Porem tenho algumas dúvidas de iniciante mesmo:

 

1 – Essa é a melhor maneira de se fazer isso?

 

2 – Que tipo de relacionamento é esse? 1:1, N:N ou 1:N

 

3 – Como crio esse tipo de relacionamento no MySQL Workbench? Tentei usando as setinhas da imagem abaixo mais na hora de gerar o SQL o banco deu erro. :/

 

2012_05_01_01h06_23.png

 

 

4 – Ao criar um novo usuário é importante que esse campo Usuario das tabelas (Endereco, Premium e Rastreio) seja automaticamente preenchido com o idUsuario para evitar problemas. Isso é feito com o relacionamento mesmo?

 

Obrigado pela atenção pessoal!

 

OPSSS! Alguém envia para o fórum MySQL? Perdão :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá renato, acho que entendi sua pergunta.

Vamos lá.

 

Seguinte, o lance de cardinalidade (1:n, 1:1, n:n) vai depender do conceito de seu sistema certo?

 

mas já que sua dúvida mais cruel é a questão de como juntar os dados da tabela endereço com a tabela de usuarios, isso que entendi, precisamos fazer um procedimento que se chama JOIN. Vou escrever tal procedimento:

 

Select u.*, e.* from usuarios u, endereco e where u.id_usuario = e.usuario and e.usuario = <codigo do usuaro>

vou destrinchar essa join:

Select -> comando que faz a seleção;

 

u.*, e.* -> isso que fiz chama-se alias (apelidos), e os asteriscos querem dizer todos os campos da tabela, você pode usar apenas campos especificos, caso queira ter mais performance.

 

usuario u, endereco e -> referencia as tabelas com seus respectivos alias.

 

u.id_usuario = e.usuario and e.usuario -> aí que mora o perigo, é de SUMA IMPORTÂNCIA que você referencie sempre o id da tabela pai com o id da tabela filha, caso não o faça, seus dados na consulta aparecerão replicados e logo causando uma grande confusão.

 

e.usuario -> parametro que você ira usar para selecionar o registro, nesse caso o codigo de usuario.

 

Agora respondendo suas perguntas mais pontuais:

 

1 – Essa é a melhor maneira de se fazer isso?

R: nesse caso a join que fiz, eu acho ;)

 

2 – Que tipo de relacionamento é esse? 1:1, N:N ou 1:N

R: Depende do conceito do seu sistema, explicando melhor: Seu usuario pode ter mais de um endereço?; um endereço pode ter mais de um usuario, e se os dois, ou se um usuario pode ter apenas um endereço e esse endereço pode ser de apenas um usuario, entendeu. Isso se chama cardinalidade, se 1:1, um para um, um usuario pode ter apenas um endereço; 1:n, um para vários, um usuario pode ter vários endereços, ou, um endereço pode ter vários usuarios; n:n, chama-se vários para vários, no caso, um usuario pode ter vários endereços e um endereço pode ter vários usuarios.

 

3 – Como crio esse tipo de relacionamento no MySQL Workbench? Tentei usando as setinhas da imagem abaixo mais na hora de gerar o SQL o banco deu erro. :/

R: Cara se não me engano, essas notações são do "peter chen" (existem várias notações, eu gosto mais do james martin, pé de galinha), losango vazio (1:1), meiocheio (1:n), cheio (n;n). Mas o uso na ferramenta vou deixar para a sua intuição ;).

 

Uma coisa: para relacionamentos n:n (vários para vários) cria-se uma tabela associativa, que obrigatoriamente conterá, duas chaves estrangeiras, uma referenciando cada tabela (no caso são duas).

 

Acho que para sua dúvida é so. Espero ter ajudado em sua dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.