6

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

尽管我不确定使用哪种方法,但我想出了两种处理方法:

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

2 . 将其分解为 15-20 个单独的专用表。

选项 1似乎是最快的,因为它涉及的连接最少,但包含 100 列的表的想法并不正确。

选项 2感觉更好,并且会将事情分解成更易于管理的块,但它不会节省任何数据库空间并且会增加连接的数量。数据库中几乎所有的列都会有一个值,我无法进一步规范这些列。

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

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

编辑: @Oded 下面的回答让我对如何访问数据有了更多的思考;它实际上只会被整体访问,而不是部分访问。例如,我不需要定期返回第 5-20 列。

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

4

3 回答 3

11

从关系纯粹主义者的角度来看 - 首先,如果它们是相关的,则没有什么反对在一个表中包含 100 列。这里的重点是,如果在规范化之后仍然有 100 列,那没关系。

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

然而,务实地讲,如果存在可测量的性能问题,那么为了提高性能而对设计进行非规范化可能是明智的。这里的关键 - 可测量的。在遇到实际问题之前不要进行优化。

在这方面,我会说您应该将 15-20 张桌子作为初始设计。

于 2013-05-31T11:02:27.357 回答
3

来自 MSDN:SQL Server 的最大容量规格

每个非宽表的列数:1,024

每个宽表的列数:30,000

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

每个主键的列数:16

当然,这只是在需要数据仅作为服务日志的情况下。

如果从服务读取后您需要维护数据->然后规范化似乎更好...

于 2013-05-31T11:09:43.630 回答
1

如果您发现“管理”具有较少列的表更容易,但是您碰巧定义了可管理性(例如,在 SSMS 中查看表数据时水平滚动较少),您可以将表拆分为1 对 1 的多个表关系而不违反规范化规则。

于 2013-05-31T11:37:07.173 回答