English 中文(简体)
优雅的数据库设计帮助...(MySQL / PHP)
原标题:
  • 时间:2009-03-11 12:07:32
  •  标签:

我正在建立一個電影網站... 我需要顯示有關每部電影的信息,包括類型,演員和大量信息(類似於IMDB.com)。

I created a movies table including an ID and some basic information. For the genres I created a genres table including 2 columns: ID and genre. Then I use a genres2movies table with two columns:movieID and the genreID, to connect between the genres and the movies tables...

例如,如果一部电影有5种不同的流派,我会在genres2movies表中的5个不同的行中得到该电影的movieID。这比每次为每部电影都包含流派更好,但是...

有更好的方法来做这件事吗?

我也需要为演员、语言和国家做这件事,所以表现和数据库大小真的很重要。

谢谢!!!

最佳回答

你走在正确的道路上。这是处理多对多关系的方式。由于使用整数,因此数据库大小不会增长很多,而为了速度,您必须为这些ID设置正确的索引。在进行SELECT查询时,请查看EXPLAIN-它有助于找到速度瓶颈。

问题回答

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

然而,您可能会发现,如果性能是关键因素,您可能需要对数据的某些部分进行去规范化,因为表之间的JOIN操作相对昂贵。 注:根据通常的翻译惯例,此翻译结果仅供参考,不代表最终准确、完美的翻译。

通常需要在正确/完全归一化与性能之间进行权衡。

您正在走在完全正确的道路上 - 这是正确、标准化的方法。

我唯一需要添加的就是确保你的连接表(genres2movies)上的索引包括genre和movie id,并且通常(取决于所使用的selects)应该定义双向索引,即两个索引,排序为genre-id,movie-id和movie-id,genre-id。这样可以确保genre或movie的任何范围选择都能使用索引检索所需的所有数据,而不必进行完整的表扫描,甚至不必访问表行本身。





相关问题
热门标签