2013-05-04 119 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

具有這種結構將允許您爲一個動畫鏈接到儘可能多的流派,只要你喜歡