我正在使用的示例是一个发票数据模型,在我们完成设计时可能会有大约 30 列。每行数据对于一张发票都是唯一的。
一些列被应用程序的多个部分使用(显然是发票编号、费用总额等),但也有一些列仅由单个进程使用。
例如,我们有三列反映varchar(18)
我们应该跟踪的外部客户使用的控制编号 ( ),但只有跟踪过程会查看这些列。控制编号通常与发票一对一,因此每张发票只会有一个控制编号。还有一些发票没有控制编号,因为它们是从不跟踪控制编号的系统导入的旧发票(它们将占初始数据的大约 25%)。即使是那些较旧的发票最终也可能会获得一个控制编号(尽管它们很可能已经足够旧而不会发生)。
从数据建模的角度或性能的角度来看,采用这些列并为它们制作一个单独的表是否更有意义,或者,我们应该将它们留在 Invoices 表中吗?感谢这个特定示例的答案,但我也对更一般的答案感到好奇,因为我们肯定会再次遇到这种情况。
根据我阅读这篇维基百科文章的方式,我的意思是垂直分区,至少在逻辑意义上是这样(在这种情况下,两个不同的表将位于同一物理存储上)。
这是 OLTP 数据库的一部分。
大概 75% 的行最终会有一个控制编号。