Mysql表结构工作正常吗?

时间:2013-02-17 12:27:00

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

我打算创建一个类似于IMDB.com的网站。为了减少执行时间,我使用以下结构。是否可以加快工作速度?

Table - 1

Id Movie_name description

1  name one    some description
2  name two    some description
3  name three  some description

Table 2

id actorname
1  name 1
2  name 2
3  name 3
4  name 4

Table 3

id movieid actorid

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并从第一个表中查找相应的名称。它会正常工作吗?还有其他想法吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

相关问题