我需要在几个表之间建立连接。我需要决定是否应该使用两个id或一个包含所有连接的表来创建几个单独的表。
表格是:
问题是:如何用这些字段计算表格中的行数?
movie_id (default=NULL)
photo_set_id (default=NULL)
dvd_id (default=NULL)
category_id
actor_id
我认为如果我只使用一个包含所有连接的表,那么在一个查询中获取所有连接可能要快得多。当然,如果这一个表不会比几个连接表大得多。
如果使用一个表不是一个好主意,请告诉我,在我的场景中使用多个连接表有什么好处?
答案 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。您还可以访问