我不确定这个问题是否完全清楚。如果您想主要介绍运动学的历史,那么适当的结构就是将数据标准化为汽车数据和航向数据。汽车数据可以独立更新,并且可能比运动学数据整体小得多。
如果您想保持汽车当前状态的平坦记录,而不是保持历史记录,那么保留原样的数据可能会更快。原因是编写整个记录在大多数情况下可能只需要一次写操作。将其拆分为两个表格可确保至少有两次写入操作。
在第一种情况下,您只是规范化数据;在第二种情况下,当前的数据结构可能是最有效的。
垂直分区实际上并不常用(除非是这样,请参见下文)。有些情况下,您可能需要使用垂直分区为:
表是很宽的,只有一些是经常使用的。例如,如果您有一个包含250列的表,其中有5个更新频繁的状态更改,并且应用程序频繁使用一小部分列。
出于安全原因,您可能混合使用1:1关系的机密数据和非敏感数据。您可以将机密数据移入具有不同权限集的另一个表中。从历史上看,并非所有DBMS平台都允许您在列级设置权限。
前两项的组合,其中某些字段的更改必须记录到审计表中,但其他字段会更频繁地更新而不需要记录。为了避免生成大量虚假审计日志数据,可审计字段可以使用审计日志记录触发器存在于其自己的表中。
最后,你得到在某些情况下在后台垂直分区(即,不是在架构明确,但以这种方式物理存储的作品)。例如,许多DBMS平台将LOB与常规表数据分开存储,这会导致表的一种隐式垂直分区。
事实上,这种特殊的情况使得带有LOB列的表在开展操作时相当昂贵,因此将LOB列移入单独的表中可能是垂直分区的良好应用。
垂直分区的用途并不多,它总是会增加额外I/O的开销。您需要避免大量开销或者有特定的原因,例如安全问题,因此需要使用它。
@Grasper:你确定FK在正确的桌子上吗? – 2010-04-20 03:10:31