Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, boa tarde. Estou desenvolvendo um sisteminha pra uma academia.
Estou com dúvida no banco de dados... como faria esse relacionamento??
Um professor pode ter vários alunos, mas um aluno só pode ter um professor.
O banco de dados dos alunos está assim:
alunos
Coluna Tipo
id_aluno int(11)
id_professor int(11)
nome_aluno varchar(200)
email varchar(200)
senha varchar(200)
ativo enum('0', '1')
Vincular o aluno ao professor é simples, mas como faria esse vínculo do professor aos alunos?
Mas teria como eu fazer na minha modelagem, ou o mais simples (ou correto) é nesse segundo exemplo?
E no caso, nesse 2º exemplo, seriam só 3 campos? id_vinculo / id_professor / id_aluno ?
Edit:
Qnd montei o exemplo não tinha a estrutura de tabela....
Mas o exemplo ta ai haha
Abraços
--------
Precisa de uma tabela auxiliar.
Aluno
Professor
Alun_Prof (ou algo assim cada um tempo um padrão, ou a galera segue um tipo)
Nessa tabela auxiliar você cadastra os id para fazer a relação.
Se liga fiz um exemplo pra ti:
CREATE DATABASE academia_imaster;
USE academia_imaster;
CREATE TABLE aluno(
id INT(8) NOT NULL PRIMARY KEY AUTO_INCREMENT
,nome varchar(250)
);
INSERT INTO aluno (nome) values ('Jose');
INSERT INTO aluno (nome) values ('Beraldo');
INSERT INTO aluno (nome) values ('Marcos');
CREATE TABLE professor(
id INT(8) NOT NULL PRIMARY KEY AUTO_INCREMENT
,nome varchar(250)
);
INSERT INTO professor (nome) values ('Rogerio');
INSERT INTO professor (nome) values ('Robevaldo');
CREATE TABLE professor_aluno(
id INT(8) NOT NULL PRIMARY KEY AUTO_INCREMENT
,professor_id INT(8) not null
,aluno_id INT(8) not null
,FOREIGN KEY (professor_id) REFERENCES professor(id)
,FOREIGN KEY (aluno_id) REFERENCES aluno(id)
);
INSERT INTO professor_aluno (professor_id, aluno_id) VALUES (1, 1); /* José é Aluno de Rogerio */
INSERT INTO professor_aluno (professor_id, aluno_id) VALUES (1, 2); /* Beraldo é Aluno de Rogerio */
INSERT INTO professor_aluno (professor_id, aluno_id) VALUES (2, 3); /* Marcos é Aluno de Robevaldo */
select
*
from professor_aluno
where
professor_id = 2;
/*
Tá legal.. o retorno ta beleza.. sabemos que o id na tabela professor 2 é o Robevaldo e o seu aluno é o Marcos (id = 3)... mas queremos trazer o nome...
+----+--------------+----------+
| id | professor_id | aluno_id |
+----+--------------+----------+
| 5 | 2 | 3 |
+----+--------------+----------+
*/
/ nesse caso só fazer um JOIN /
select
*select
professor.nome
,aluno_id
from
professor_aluno
LEFT JOIN professor ON (
professor_aluno.professor_id = professor.id
)
where
professor_id = 2;
/*
+-----------+----------+
| nome | aluno_id |
+-----------+----------+
| Robevaldo | 3 |
+-----------+----------+
1 row in set (0.04 sec)
Pra finalizer só trazer o nome do aluno... só mais um Joinzin e ta show...
*/
select
professor.nome
,aluno.nome
from
professor_aluno
LEFT JOIN professor ON (
professor_aluno.professor_id = professor.id
)
LEFT JOIN aluno ON (
professor_aluno.aluno_id = aluno.id
)
where
professor_id = 2;
/*
+-----------+--------+
| nome | nome |
+-----------+--------+
| Robevaldo | Marcos |
+-----------+--------+
1 row in set (0.06 sec)
Agora só testar com o outro professor (id = 1)
*/
select
professor.nome
,aluno.nome
from
professor_aluno
LEFT JOIN professor ON (
professor_aluno.professor_id = professor.id
)
LEFT JOIN aluno ON (
professor_aluno.aluno_id = aluno.id
)
where
professor_id = 1;
/*
+---------+---------+
| nome | nome |
+---------+---------+
| Rogerio | Jose |
| Rogerio | Beraldo |
+---------+---------+
2 rows in set (0.00 sec)
Perfeito.... enfim espero que tenha rolado legal pra ti...
*/
A relação é bilateral.
No banco você sabe qual é o professor de cada aluno e sabe quais são os alunos de cada professor (basta passar o ID do professor no WHERE)
Mais sobre relacionamentos de tabelas:
http://forum.imasters.com.br/topic/140816-mini-tutorial-de-mysql/
http://rberaldo.com.br/categorias-e-subcategorias-exemplo-de-modelagem/
Beraldo, não tinha pensando na possibilidade da relação bilateral.
Mas caso tenha varias aulas, ela ainda atende?
Ex:
Professor Jose, Aluno João, Aula de Geometria.
Professor Jose, Aluno João, Aula de Matemática.
Obrigado a todos que postaram! Vou usar o exemplo do gabrieldarezzo!
Na realidade você só mudará a query, o vínculo já foi feito com a sua modelagem, outra solução é usar três tabelas:
1 - professores
2 - alunos
3 - vinculo -> Aqui você faria a vinculação entre a tabela 1 e 2.