4

我正在尝试收集有关时态数据库的信息。我知道这不是一种现代技术,但我看到许多使用数据库的人不知道时间方法是如何工作的(我问了一些高级程序员和系统分析师关于时间数据库的问题,他们的回答是“嗯?”) .

我知道有有效时间状态表和事务时间状态表,以及双时态表。我认为双时态表对于大多数用途来说太复杂了,因为现在空间不再是问题,即使数据是冗余的,在 2 个不同的表上写入相同的信息也会更有效。但是,我在网上进行了许多搜索,试图查看实际使用双时表的位置,但没有发现任何有用的东西。

是否存在使用双时态表比分别使用有效时间和事务时间状态表更方便的情况?有现实世界的例子吗?

4

2 回答 2

2

当然!以资产负债表数据为例。您会发现由于迟到的数据、调整、人为错误等原因,此信息将从 WD1(工作日)更改为 WD x。

为了启用可重复的报告、审计跟踪和时间比较,必须保留“旧”(无效?)结果的记录。双时间是管理此类更新的好方法,尤其是在日内。从用户的角度来看,我认为这并不复杂 - 只是 where 子句的另一个过滤器。

我承认加载过程很复杂,但并没有那么糟糕。我刚刚完成了一个通用转换(在 SAS 中,为一个唯一的业务密钥处理所有场景)并且花了一天时间。

回到用例。在同一张表上同时拥有有效(业务)时间和事务(版本)时间可以实现:

  • 可重复的结果(具有单独的表和相应的更新可能意味着在两个不同的日子为同一查询获得不同的结果)
  • 可比较的结果(可以回答诸如“X 的值是多少,正如我们在 Y 时所知道的那样?”)
  • 快速结果(仅处理单个表,以透明且易于查询的方式更新)。

从这个意义上说,它是一种适用于 DWh 中的许多(如果不是所有)表的结构。

2020 年更新:SAS 的数据控制器(SAS 9 和 Viya)​​可用于 SAS 的双时态数据转换。提供演示版本: https ://docs.datacontroller.io/dcc-tables/#var_busfrom-var_busto

于 2015-01-15T17:24:16.437 回答
0

我认为您的问题引发了更多问题,但这一切都归结为足够多。我开发了一个 Bi_Temporal SQL Server 引擎,它支持对象版本控制和时间关系以及 Temporal DB 的所有其他漂亮部分。

这是因为该项目需要能够及时倒带到一个地方,并看到当时的一切。我的意思是一切,包括数据、关系和用户访问。这是我建造的最复杂的东西,但最终它是如此复杂,没有其他人可以维护它,或者理解正在发生的事情。所以有一个真实世界的用例和一个可交付成果。

不是每个人都喜欢喝茶,因为您必须能够像所有 db 一样考虑时间维度以及对象版本的变化。

希望这可以帮助某人。我知道这篇文章很旧,但由于它是我在搜索 Temporal DB 时发现的第一篇文章,因此可能有人会感兴趣。

于 2018-08-08T00:56:16.013 回答