如何计算我计划制作的表格中的行数

时间:2011-11-11 09:12:16

标签: database database-design

我需要在几个表之间建立连接。我需要决定是否应该使用两个id或一个包含所有连接的表来创建几个单独的表。

表格是:

  • 电影 - 50000行
  • photo_set - 50000行 - 每张照片集与电影相关,但可能会有一些没有电影或没有照片的电影的照片
  • dvd - 13000行 - 每张DVD上可以有3-5部电影,有些电影没有连接到任何DVD
  • 类别 - 50行 - 每部电影可以有1-5个类别。所有电影的类别及其在一张DVD中的照片都是相同的
  • 演员 - 15000行 - 一部电影中可以有2-5个演员

问题是:如何用这些字段计算表格中的行数?

  • movie_id (default=NULL)
  • photo_set_id (default=NULL)
  • dvd_id (default=NULL)
  • category_id
  • actor_id

我认为如果我只使用一个包含所有连接的表,那么在一个查询中获取所有连接可能要快得多。当然,如果这一个表不会比几个连接表大得多。

如果使用一个表不是一个好主意,请告诉我,在我的场景中使用多个连接表有什么好处?

3 个答案:

答案 0 :(得分:2)

您应该创建多个连接表,每个多对多关系一个。

具有多个连接表的原因与具有多个数据表的原因相同。 您可以在同一个表格中存储电影,照片等。但是你没有,因为在设计你的数据库时你会争取third normal form。 每种对象都应该拥有自己的表。

电影与演员之间的关系与电影与电影之间的关系并不相同。假设您要为关系添加属性。也许你想存储演员在电影中扮演的角色,或者你想要为照片命名(“奥斯卡奖的图片”,“电影的截图”等)。

我的观点是,如果你为每个关系制作一个表,扩展应用程序会更容易。

估算行数:

每个表中的行数将是驱动表中的行数乘以平均连接项数。

实施例: 让我们假设每部电影的平均演员数为3。 然后movie_actor表中将有50000 * 3 = 150000行。

答案 1 :(得分:0)

要进行计算,您可以使用平均值:

如果每部电影平均有2.5个演员,那么每部电影的演员表将有50k * 2,5 = 125k行

最大的可能是电影<> photo_set /

那么,从这些数字来看,任何体面的RDBMS在表格中的记录数量方面都不会给你带来任何麻烦。因此,您可以选择最方便的架构。

我会用几个。它使您的设计更灵活,更容易扩展(如果您想维护有关连接的信息。它也像Klas写的那样具有索引优势。

答案 2 :(得分:0)

在MySQL中,最大行数受表大小和MAX_ROWS表选项的限制。表大小取决于操作系统和文件系统因此您不必担心现在拥有的行数。

Win32 w/ FAT/FAT32 - 2GB/4GB
Win32 w/ NTFS - 2TB (possibly larger)
Linux 2.2-Intel 32-bi - 2GB (LFS: 4GB)
Linux 2.4+(using ext3 file system) 4TB
Solaris 9/10 - 16TB
MacOS X w/ HFS +2TB

MAX_ROWS表选项是软件限制,可以在以后更改。如果您要存储很多行,请相应地设置MAX_ROWS。您还可以访问

StackOverFlow Link

Full Table

One Large Table Vs few Small Tables