【问题标题】:Mysql Table Structure Working Fast?Mysql 表结构工作快吗?
【发布时间】:2013-02-01 23:39:37
【问题描述】:

我计划创建一个类似于 IMDB.com 的网站。为了减少执行时间,我使用以下结构。可以更快地工作吗?

表格1 Id Movie_name 描述 1 名称 1 一些描述 2 名称 2 一些描述 3 名称 三 一些 描述 表 2 id 演员名 1 个名字 1 2 名称 2 3 名称 3 4 名称 4 表3 id 电影id 演员id 1 1 1 2 1 2 3 1 3 4 1 9 5 2 6 6 2 5 7 2 8 8 2 1

当我想列出电影程序中的演员时,将从表 3 中检索演员 ID,并从表 2 中找到相应的名称(使用单个查询)。当我想列出演员的电影时,它将从表 3 中检索电影 ID,并从第一个表中找到相应的名称。它会正常工作吗?还有其他想法吗?

【问题讨论】:

  • 在大多数情况下,actor的顺序是有用的。
  • 如果您还不熟悉数据库规范化,我建议您自己熟悉一下。这将指导您如何最好地设计您的表格和它们之间的关系。

标签: mysql sql join database-design database-performance


【解决方案1】:

这将给指定电影中的所有演员,

SELECT  c.ID, c.actorName
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   a.ID = 1

这将为指定演员提供所有电影

SELECT  a.*
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   c.ID = 1

如需进一步了解联接,请访问以下链接:

更新 1

这叫Relational Division

SELECT  a.ID, a.Movie_Name
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   c.ID IN (1, 2, 3)
GROUP   BY a.ID, a.Movie_Name
HAVING  COUNT(DISTINCT c.ID) = 3

【讨论】:

  • 谢谢你的sql查询我想找到演员1和演员2一起表演的电影的名字。你能帮我吗?
【解决方案2】:

建议你修改table3,去掉id字段。将movieid 和actorid 一起用作主键。您可能希望在此表中添加其他字段,例如 Jermaine Xu 的评论中建议的角色名称和出现顺序。

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 2011-07-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-04
    • 2013-08-24
    • 2021-12-28
    相关资源
    最近更新 更多