具有变化模式的双时态表

p.v*_*zli 5 sql-server-2008 database-design sql-server

我必须使用 MS SQL-Server 2008 R2 设计一个涵盖业务假设的数据库。表的当前数据将导出到文本文件并用作某个应用程序的输入。我想将这些表实现为 R. Snodgrass 所描述的双时态表,以便跟踪有效时间和交易时间。

然而,表的逻辑模式有可能并且很可能会改变,即可以添加新列或可以删除​​旧列。我将如何在表格的设计中反映这一点?

显然,我无法真正删除一列,因为所有旧数据都会消失。我应该“标记”带有 NULL 条目的行中不可用的列吗?同样,我将如何跟踪当前正在使用的列?这对于导出数据至关重要,因为只应导出“活动”列。

最后但并非最不重要的是,我如何记录添加了新列或删除了旧列?

Sir*_*lot 2

我不确定这是否能回答您的所有问题,但这听起来与我对数据仓库所做的非常相似。然而,按照我解释你的帖子的方式,你会希望有一个包含你的数据的表,另一个包含你的表定义元数据。

对于数据表,添加一列来标记 is_current。(int 或 bit 数据类型)还有 2 个日期列 valid_dt_from 和 valid_dt_to。

如果一行更改,则更新旧行 is_current = 0 和 valid_dt_to = getdate ()。

插入 is_current =1 且 valid_dt_from = getdate () 的新行。

您可以使用单个合并查询来完成上述操作。

要获取当前数据,请从表中选择 *,其中 is_current = 1。

根据需要添加新列。但不要删除旧列。理论上,如果您必须将表重建到之前的时间点,那么该时间点的所有行都应该具有空值。

创建一个类似的表来定义您的数据表定义。添加一条记录以显示每个字段何时添加、删除以及是否是最新的。

您的选择查询可以动态构建。其中 current =1,或在某个时间点重建。