我需要在几张桌子之间建立联系。我需要决定是使用两个ids创建几个单独的表,还是使用所有的连接创建一个表。
这些表格是:
问题是:如何计算具有此类字段的表中的行数?
movie_id (default=NULL)photo_set_id (default=NULL)dvd_id (default=NULL)category_idactor_id我认为,如果我只使用一个包含所有连接的表,那么在一个查询中获取所有连接可能要快得多。当然,如果这个表不会比几个连接表大很多的话。
如果使用一个表不是一个好主意,请告诉我,在我的场景中使用几个连接表有什么好处?
发布于 2011-11-11 09:19:16
您应该建立几个连接表,每个多到多的关系一个。
拥有多个连接表的原因与拥有多个数据表的原因相同。你可以把电影、照片等放在同一张桌子上。但是你没有,因为在设计你的数据库时,你会为第三范式而奋斗。每种对象都应该有自己的表。
电影与演员的关系与电影与摄影的关系是不一样的。假设您想要向关系添加属性。也许你想要存储电影中演员扮演的角色,或者你想要命名照片集(“奥斯卡奖的照片”,“电影截图”等等)。
我的观点是,如果每个关系创建一个表,则扩展应用程序将更加容易。
估计行数:
每个表中的行数将是驱动表中的行数乘以连接项的平均数量。
让我们假设每部电影演员的平均人数是3人。然后,movie_actor表中将有50000 *3= 150000行。
发布于 2011-11-11 09:20:01
对于计算,可以使用平均值:
如果平均每部电影有2,5名演员,那么您的演员-每部电影表将有50k * 2,5 =125 k行。
最大的可能是电影<>照片集/
从这些数字来看,当涉及到表中的记录数量时,任何合适的RDBMS都不会给您带来任何麻烦。因此,您可以选择最方便的模式。
我会用几个。它使您的设计更加灵活和易于扩展(如果您想维护有关连接的信息的话)。事实上,它在索引方面也有优势,就像Klas所写的那样。
发布于 2011-11-11 09:25:19
在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 +2TBMAX_ROWS表选项是软件限制,以后可以更改。如果要存储许多行集MAX_ROWS accordingly.Further,则可以访问
全表
一张大桌子和几张小桌子
https://stackoverflow.com/questions/8091787
复制相似问题