Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
/applications/core/interface/imageproxy/imageproxy.php?img=http://s17.postimage.org/cf4f35jen/2012_05_01_01h09_51.png&key=f6813b7ebbc2252942246758655e911a7cb6009100543d89953c70e0db8d3fa1" alt="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. :/
/applications/core/interface/imageproxy/imageproxy.php?img=http://s14.postimage.org/pwjr4ri0x/2012_05_01_01h06_23.png&key=f0f6c50eda802a009d54b004a00ff919f51d9a0584e725ff2676554aa6f2c29b" alt="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 :(
Caro GCAS, MUITO obrigado pela resposta, respondeu tudo com maestria! muito obrigado :clap:
Fico feliz matando sua dúvida, tamo aí pra isso.
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.