【发布时间】:2017-05-04 13:03:33
【问题描述】:
我正在建立一个数据库,其中包含电影、导演、摄影师、配乐作曲家等。
现在每部电影都有一行标题、描述等。此外,还应该有一列用于导演、作曲家等。
我不想在电影表的每一行都重复导演的名字,所以我把导演放在不同的表中,作曲家放在不同的表中等等。
在电影表中,然后我用外键引用导演、作曲家等数据。
要获取电影的所有数据,我会创建一个视图,将所有表连接在一起,这样一个 MySQL 查询就可以为我提供电影的人类可读信息。
这是一个好方法吗?还是多个左连接不是一个好主意?
视图看起来像这样(种类)
SELECT `movies`.`title` as `title`, `movies`.`description` as [...],
`directors`.`name` as `name` [...], `composers`.`name` as `cname` [...]
from
`movies`
left join
`directors` on `movies`.`directors_id`=`directors`.`id`
left join
`movies`.`musicians_id` = `musicians`.`id` [...]
这是一种有效的方法吗?
【问题讨论】:
-
你的方法叫做normalization,它是存储数据的好方法。
-
您的方法非常好。您可能希望在适当的情况下将 LEFT JOIN 替换为 INNER JOIN(例如,我猜每个动作都有一个导演)。
-
我仍然不太了解内连接和左连接之间的区别(我知道带有圆圈的图片。我相信需要更多地了解它)。感谢您的快速回答!
-
我明白你在重新发明轮子的感觉:那里有很多电影数据库 我的软件成功秘诀:如果你能买到,就不要建造它。
-
@onedaywhen:我建立这个数据库的原因可能有一百万个。也许我只关注那些不回答问题而是给出“智慧”的人的电影。但让我告诉你:老实说,我不打算做电影页面。这是一个例子,所以我不需要告诉我真正要做什么。