我有一个表来跟踪生产,有如此多的细节存储在表中,比如50条不同的信息。
所以我的问题是,我应该把它放在一张大桌子上,还是更好地把它分成几张。
我使用EF 4.0并连接到MsSql。表格太大了,我需要在实体设计器中滚动很多次才能看到所有字段……
我不认为一个特定的问题会在一个表中包含如此多的字段。但如果它有什么问题,我想现在就以正确的方式设计它。当很难改变的时候就不会了。
发布于 2011-10-04 06:26:50
表中的字段太多会导致较大的元组大小,这会使表扫描花费更长的时间。如果您正在从表中读取没有索引的数据,或者不能利用索引,或者表示的数据占数据的比例足够大而索引没有帮助,那么就会发生表扫描。另一个问题是更新。更新通常会将行从其当前磁盘位置重新定位到新位置。如果您的更新增加了元组的大小,并且您的更新通常只影响几个列,那么您更有可能得到表碎片。这将在所有方面减慢对数据的访问。在这种情况下,拆分表可能是有益的。
一般来说,使用一个好的系统,除非您的表有很好的行数(可能>50,000),您有适当的索引,并且您没有进行过多的查询,否则应该不会有大的问题。如果慢查询出现问题,请对照它们的解释计划检查它们,以确定是否大表是问题所在。
如果您确实需要拆分它,有时这是合理的,那么可以创建一对一的关系。使用SQL Server时,我在尝试创建双向外键时遇到了问题。我解决这个问题的唯一方法是确保我的应用程序不会直接从辅助表中删除,或者创建一个触发器过程。
我没有使用EF,但是对于JPA,这可能是一个特别糟糕的问题。
发布于 2011-10-04 06:17:17
如果所有字段都是相关的,直接与主要项目相关,并且始终只与该项目有一对一的关系,那么这是很好的。一些实体有很多关于它们的细节,正确的规范化可能会将它们都放在同一个表中。
发布于 2011-10-04 06:38:17
您应该考虑对多个表中的数据进行规范化。如果您的大表中有重复的数据,以及可能的一对多关系,这是一个特别大的好处。
Database Normalization本身就是一个非常大的主题,而且影响深远。但是有很多资源可以让你对它有一个很好的理解。
https://stackoverflow.com/questions/7641290
复制相似问题