1

我打算创建一个类似于 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,并从第一个表中找到相应的名称。它会正常工作吗?还有其他想法吗?

4

2 回答 2

2

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

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
于 2013-02-17T12:32:49.770 回答
0

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

于 2013-02-17T12:37:04.310 回答