处理包含大量字段的表

时间:2011-10-03 22:14:56

标签: .net sql-server entity-framework database-design

我有一张表来跟踪制作,有很多细节要存储在表格中,就像50条不同的信息一样。

所以我的问题是我应该把它放在一张大桌子上,还是把它分成一些更好的方法。

我使用EF 4.0并连接到MsSql。该表非常庞大,我需要在实体设计器中滚动很多才能看到所有字段......

我不认为在一个表中有这么多字段的具体问题。但如果有一些问题,我现在想以正确的方式设计它。不是当它难以改变的东西。

3 个答案:

答案 0 :(得分:3)

表中的字段太多会导致大的元组大小,这会使表扫描花费更长时间。如果从表中读取未编制索引的数据或无法利用索引或表示索引无法帮助的足够大部分数据,则会发生表扫描。另一个问题是更新。更新通常会将其当前磁盘位置的行重定位到新位置。如果您的更新增加了元组大小,并且您的更新通常只影响几列,则您更有可能获得表碎片。这将减慢对所有战线数据的访问速度。在这种情况下,分割表格会很有用。

一般情况下,使用一个好的系统,除非你的表有很多行(可能> 50,000),你有适当的索引,并且你没有进行过多的查询,不应该有一个重大问题。如果慢查询后退,请根据他们的解释计划检查它们,以确定大表是否是问题。

如果你确实需要将其拆分出来,有时这是明智的,那么就有可能建立一对一的关系。使用SQL Server,我在尝试创建双向外键时遇到了问题。我解决这个问题的唯一方法是确保我的应用程序不会直接从辅助表中删除,或者创建一个触发器程序。

我没有使用EF,但是使用JPA这可能是一个特别讨厌的问题。

答案 1 :(得分:2)

如果这些字段都是相关的,与主要项目直接相关,并且始终只与该项目有一对一的关系,那就没问题了。一些实体有很多关于它们的细节,正确的规范化可能将它们全部放在同一个表中。

答案 2 :(得分:2)

您应该考虑在多个表中规范化数据。如果大表中存在重复数据,以及可能的一对多关系,这尤其有用。

Database Normalization本身就是一个非常大的话题,它深入一英里。但是有足够的资源可以很好地理解它。