Digamos que tenho um banco de dados com as seguintes tabelas:
Mesa movie
contendo:
movie1
movie2
Mesa actors
contendo:
actor1
actor2
actor3
Digamos actor2
aparece em ambos os filmes movie1
e movie2
. Como posso usar isso agora sem ter que inserir um registro diferente para cada ator agora para dar a ele seu próprio id de filme na tabela actors
, para economizar espaço?
Respostas:
2 para resposta № 1Acho que o que você está procurando é uma tabela de junção (tabela de links) (http://en.wikipedia.org/wiki/Junction_table):
(Só por causa disso, eu coloco plural em ambos os nomes de mesa)
tab movies
= movie1
= movie2
tab actors
= actor1
= actor2
= actor3
tab movies_actors
= actors (id of tab_actors)
= movies (id of tab_movies)
Em seguida, você pode juntar tab_movies_actors com tab_movies e tab_actors para obter quais atores pertencem a quais filmes:
SELECT * FROM tb_movies tm
JOIN tb_movies_actors tma ON (tm.id = tma.movies_id)
JOIN tb_actors ta ON (tma.actors_id = ta.id)
ou um filme específico:
SELECT * FROM tb_movies tm
JOIN tb_movies_actors tma ON (tm.id = tma.movies_id)
JOIN tb_actors ta ON (tma.actors_id = ta.id)
WHERE tm.id = 10
0 para resposta № 2
Sempre que houver uma relação "muitos para muitos" é necessária uma tabela de links como a que é mostrada na resposta anterior.