优雅的数据库设计帮助...(MySQL/PHP)

3
我正在建立一个电影网站...... 我需要显示每部电影的信息,包括类型、演员和大量信息(类似于IMDB.com)......
我创建了一个“电影”表,包括ID和一些基本信息。 对于类型,我创建了一个“类型”表,包括两列:ID和类型。 然后我使用一个“类型2电影”表,包括两列:电影ID和类型ID,来连接类型和电影两个表格之间的关系......
这样,例如,如果一部电影有5种不同类型,则在“类型2电影”表中会出现5个不同的电影ID行。这比为每部电影每次都包含类型更好,但是...
有没有更好的方法???
我还需要对演员、语言和国家进行类似操作,因此性能和数据库大小非常重要。
谢谢!!!

只是想问一下,向所有人提问(我是一个mysql新手),是否可以更有效地删除所有的genres2movies表,因为在这个例子中,你是否可以在电影表中包含一个genre列,用逗号分隔genres,然后在代码中解析和分割它们? - roozbubu
3个回答

6

听起来你现在遵循了适当的规范化规则,这正是你想要的。

然而,如果性能是关键因素,你可能会发现需要去规范化你的数据的某些部分,因为表之间的连接操作相对较为昂贵。

通常情况下,这是规范化和性能之间的权衡。


5

你走在正确的道路上。这是处理多对多关系的方法。由于使用整数并为其设置正确的索引以提高速度,数据库大小不会增长太多。在进行SELECT查询时,请查看EXPLAIN - 它有助于找到速度瓶颈。


我不是数据库专家...你说的正确索引是什么意思?对于'movies'数据库,我使用ID作为主键。对于'genres'也是如此,对于'movies2genres',我将movieID和genreID都设置为主键..这样做正确吗? - Jonathan

0

你正在完全正确的轨道上 - 这是正确的、规范化的方法。

我唯一要补充的是确保你在连接表(genres2movies)上的索引包括流派和电影ID,并且通常值得(取决于所使用的查询)在两个方向上定义索引 - 即,两个索引,顺序为genre-id,movie-id和movie-id,genre-id。这样可以确保对流派或电影的任何范围选择都能够使用索引检索所需的所有数据,而不必进行完整的表扫描,甚至不必访问表行本身。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接