2013-05-04 112 views
0

我有一个数据库MOVIES,它有2个表。 1是MOVIE,另一个是GENRE。有多个外键的键

我希望能够将MOVIE的行条目与GENRE表中的多行相关联。 MOVIE表中只有1列可以做到这一点吗?

我已经看过电影数据库的例子,但它们只允许将1种流派映射到单个电影。有没有办法让多个流派属于单个条目电影?我使用MySQL来创建数据库。

+0

从答案我一直得到它似乎需要多对多的关系。如果我有第三个表来跟踪这个关系,它将看起来像这样:[link] http://oi40.tinypic.com/343gs9i.jpg或者第三个表中的1行代表MOVIE中的1个条目和多个条目来自GENRE? – 2013-05-04 01:00:39

回答

3

你应该有第三张表,MOVIE_GENRE,实现这种多对多的关系。它在MOVIEGENRE表中都有外键。一个查询列表所有与他们的流派电影列表将如下所示:

SELECT m.title, 
     IFNULL(GROUP_CONCAT(g.name), "") genres 
FROM Movie m 
LEFT JOIN Movie_Genre mg ON m.id = mg.movie_id 
JOIN Genre g ON g.id = mg.genre_id 
GROUP BY m.id 
+0

如果我制作第三张表,是否意味着MOVIE_GENRE的条目有1个来自电影表的键和1个来自流派表的键?如果是这样,我需要在MOVIE_GENRE中创建一个与1个电影关联的类型的新行记录吗? – 2013-05-04 00:53:08

+0

是的,这正是它的意思。这就是你如何表现电影是流派的事实,你在表中添加一个条目。 – Barmar 2013-05-04 00:56:15

2

你需要一个多一对多或加入表2个colums,

MovieID和GenreID

具有这种结构将允许您为一个动画链接到尽可能多的流派,只要你喜欢