【问题标题】:key with multiple foreign keys具有多个外键的键
【发布时间】:2013-05-04 00:16:55
【问题描述】:

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

我希望能够让 MOVIE 的行条目与 GENRE 表中的多行相关联。这可以只用 MOVIE 表中的 1 列来完成吗?

我看过电影数据库的示例,但它们只允许将一种类型映射到单个电影。有没有办法让多个类型属于一个单一的条目电影?我正在使用 mySQL 创建数据库。

【问题讨论】:

  • 从我得到的答案看来,似乎需要多对多的关系。如果我有第三张表来跟踪这种关系,它是否必须如下所示:[link]oi40.tinypic.com/343gs9i.jpg 或者第三张表中的 1 行是否可以代表 MOVIE 中的 1 个条目和 GENRE 中的多个条目?

标签: mysql database database-design relational-database


【解决方案1】:

您应该有第三个表,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

【讨论】:

  • 如果我创建第三张表,这是否意味着 MOVIE_GENRE 的条目有 1 个来自电影表的键和 1 个来自流派表的键?如果是这样,我是否需要在 MOVIE_GENRE 中为与 1 部电影相关联的每个类型创建一个新行条目?
  • 是的,就是这个意思。这就是您表示电影属于某种类型这一事实的方式,您可以在表格中添加一个条目。
【解决方案2】:

您需要一个多对多或包含 2 列的连接表,

电影 ID 和流派 ID

拥有这种结构后,您可以将一部电影链接到任意数量的流派

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多