数据库设计:一个大表与几个较小的表

时间:2013-05-31 10:55:59

标签: sql-server database database-design

我必须创建一个数据库来存储向第三方Web服务门户发送和接收的信息。虽然我可以通过规范化删除大约50个字段,但是有大约150个字段要发送的信息(例如,有三组地址可以保存在地址表中)。但是,这仍然会留下一个可能有100列的表。

虽然我不确定使用哪种方法,但我想出了两种方法:

1 即可。有一个包含100列的表和三个对地址表的引用。

2 即可。将其细分为15-20个独立的专用表格。

选项1 似乎最快,因为它涉及最少的连接但是有100列的表的想法感觉不对。

选项2 感觉更好,并且会将内容分解为更多可管理的块,但它不会保存任何数据库空间并且会增加连接数。几乎所有数据库中的列都有一个值,我无法再对这些列进行标准化。

我的问题是,在这种情况下,是否可以使用包含c.100列的表,或者我应该尝试将其分解为几个表以进行演示?

请注意:表格结构在使用过程中不会改变,将为新版本的Web服务门户创建新数据库。我无法控制Web服务数据结构。

编辑: @ Oded的回答让我更多地考虑如何访问数据;它实际上只能被访问,而不是部分访问。例如,我不需要定期返回第5-20列。

答案:我在发布后根据评论接受了Oded的答案,帮助我解决了问题,我决定选择1。因为数据是全部访问然后有一个表似乎是更好的解决方案例如,如果我经常想要访问第5-20列而不是完整的表行,那么出于性能原因,我会看到将其分解为单独的表。

3 个答案:

答案 0 :(得分:10)

从关系纯粹主义的观点来看 - 首先,如果它们是相关的,那么表中没有任何列可以反对。这里的要点是,如果normalizing之后你还有100列,那就没关系。

但是你应该规范化,并且在这个过程中你最终会得到15-20个独立的专用表,大多数关系数据库专业人员会同意这是一个更好的设计(避免数据重复与更新/删除相关问题,缩小数据占用空间等......)。

然而,实际上,如果存在可测量的性能问题,非规范化您的设计以获得性能优势可能是明智的。关键在于 - 可测量。在遇到实际问题之前不要进行优化。

在这方面,我会说你应该把15-20张表作为初步设计。

答案 1 :(得分:3)

来自MSDN:Maximum Capacity Specifications for SQL Server

  

每个非扩展表的列数:1,024

     

每张宽表的列数:30,000

所以我认为在你的情况下100列是可以的。也许你需要注意(来自同一个链接):

  

每个主键的列数:16

当然,只有在需要数据仅作为服务的日志时才会出现这种情况。

如果在阅读服务后您需要维护数据 - >然后正常化似乎更好......

答案 2 :(得分:1)

如果您发现使用较少的列“管理”表更容易,但是您恰好定义了可管理性(例如,在查看SSMS中的表数据时减少水平滚动),您可以将表分成几个表与1对1的关系而不违反规范化规则。