问题标签 [bi-temporal]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - SCD 日期对的最佳实践(关闭/打开时间戳)
在实现时间日期时间对时,哪种方法更好?
方法一
与过滤子句一起使用,如下所示:
方法二
与过滤子句一起使用,如下所示:
注意事项:
方法 1 与 BETWEEN 子句语法(包括范围)兼容。出于这个原因,我认为这是最好的方法,但是 - 这是我关心的 - 关闭和打开时间戳之间总是存在差距!例如以下将(从业务角度不正确)返回任何内容:
不同的数据库在这里会有不同的精度。我想必须有标准(过滤时总是四舍五入到最接近的秒数),但只是想知道是否有任何其他理由支持方法 1(例如提议的双时间“AS OF”语法兼容性)?或者实际上,是否(以及为什么)方法 2 会更可取..
join - DB2 加入困难
我有以下情况(简化):
2 个 BiTemp 表
- basicdata (id, btmp_tsd, name, prename)
- 扩展数据(id、btmp_tsd、basicid、代号、代号)
在扩展数据中,一个基本数据可以有多个条目,每个条目都有不同的代号和值。
我必须创建一个 SQL 来选择自指定时间以来已更改的所有行。对于基本数据表,这相对简单:
现在我需要加入第二个表以获取代号“test”的代码值。问题是,它可能不存在,在这种情况下,无论如何都应该收集该行。但是如果有一行但不在时间范围内,我不应该得到结果。
我希望我能够解释我的问题。加入是我仍然看不到低谷的事情之一......
编辑:好的,这是一个示例
好的,现在有了这些条目,我想要所有自2013年 10 月 1 日以来发生任何变化的用户 ID,我应该得到
User1(因为extendeddata superadmin有变化)
User2(更改了名称,我希望他更坚强,他在扩展数据表上没有条目)
不是 User3(他在两个表上都有一个条目,但不在指定范围内)
database - 在什么情况下实际使用双时表?
我正在尝试收集有关时态数据库的信息。我知道这不是一种现代技术,但我看到许多使用数据库的人不知道时间方法是如何工作的(我问了一些高级程序员和系统分析师关于时间数据库的问题,他们的回答是“嗯?”) .
我知道有有效时间状态表和事务时间状态表,以及双时态表。我认为双时态表对于大多数用途来说太复杂了,因为现在空间不再是问题,即使数据是冗余的,在 2 个不同的表上写入相同的信息也会更有效。但是,我在网上进行了许多搜索,试图查看实际使用双时表的位置,但没有发现任何有用的东西。
是否存在使用双时态表比分别使用有效时间和事务时间状态表更方便的情况?有现实世界的例子吗?
sql - 双时态 SQL 数据库是否可能仅使用 3 个时间戳?
在 SQL 中实现双时态数据库时,通常建议使用以下时间戳:
- 有效开始
- 有效结束
- 交易开始
- 交易结束
我以前使用过这种方法几次,但我一直想知道为什么只有 3 个时间戳,而将 TransactionEnd 排除在外,并不仅仅是正确的实现。这里的事务时间范围跨越从 TransactionStart 到下一个 TransactionStart。
是否有任何强有力的论据不仅使用 3 个时间戳,这会限制数据库的大小?
oracle - 双时间完整性检查
对此的需求来自这样一个事实,即我们现在有许多更新敏感双时态表的来源,我们有点警觉并且想要掩护我们的背部。
我使用 Richard Snodgrass 的“Developing Time-Oriented Database Applications in SQL”来帮助我解决这个问题。
我一直在尝试提出一个触发器,该触发器断言在每次更新或插入后都会保留双时间合同。更具体地说,合约确保主键是有效时间和交易时间排序的,以及非排序的有效时间连续性断言。分解后断言如下:
VALID_TIME
断言“活动”时间线中没有重叠。断言时间线没有重叠
TRANSACTION_TIME
。VALID_TIME
断言时间轴上没有间隙。
“活跃”是指TRANSACTION_END
价值为“永远”的记录(9999-12-31)
。
这是我到目前为止所拥有的:
PK_COLUMN(s)
是天然钥匙的气质,休息应该是显而易见的。
问题如下:
我是否包括了所有可能的情况?有没有我忘记核对的附加合同?
额外的问题,你能推荐任何其他关于双时态数据架构的可靠书籍/资源吗?
//添加了更多标签,以扩大覆盖范围...
欢迎任何意见、建议、建设性批评。
提前致谢,
马特。
marklogic - 在 MarkLogic 8 中删除/更新双时间三元组
随着 MarkLogic8 中新的 BiTemporal 功能的引入,您可以跟踪两个时间轴的变化:有效时间和系统时间。三元组也支持这些功能。所以你可以沿着这两个轴回到过去,并可能看到变化。但是,由于三元组存储在文档中,并且双时态元数据存储在文档级别而不是三元组,因此您无法删除或更新特定的三元组。此外,您不能将新的 SPARQL 更新功能与时间三元组一起使用。这是一个例子:
在第 1 天,我们添加了以下三元组,我们假设它们总是正确的:
在第 2 天,我们添加以下三元组,因为我们认为 Luna 住在丹佛:
现在在第 3 天,我们想将 Luna 市更改为旧金山,所以我们别无选择,只能添加另一个三元组:
如果没有三重更新/删除的概念,有几个问题使 MarkLogic 无法正确回答某些问题:
- 如果您要求所有有效三元组(沿有效时间轴),您将获得所有三元组,包括
<Luna> <city> <Denver>
. - 如果您要求所有当前三元组(沿系统时间轴),您将再次获得所有三元组。
- 如果您要求最新的三元组(沿两个轴),您只会得到
<Luna> <city> <San Francisco>
.
这是一个提供所有有效三元组的示例查询:
基于这些,您无法正确回答以下问题:
- 如果您要求 Luna 现在居住的有效城市和州,您将得到丹佛和旧金山及其州。
- 如果您询问 Luna 居住的最新城市和州,您将一无所获,因为定义城市和州之间联系的三元组不在最新集合中。
以下是主要问题的摘要:
- 将新的三元组添加到数据库中:ML8 双时间特性完全支持它。您可以及时返回并查看添加之前的数据库。
- 删除三元组:不支持。您只能使用 temporal:document-delete 从“最新”集合中删除最新插入的三元组。数据在那里,您可以查询。您也可能最终删除要保留的三元组,因为一组三元组存储在单个文档中。
- 更新三元组(例如 Luna 从丹佛搬到旧金山)。理想情况下,您应该能够删除旧的三元组并插入新的三元组(类似于 ML8 SPARQL 更新功能),但由于不支持删除,您最终会将新的和旧的三元组都存储在数据库中/从数据库中返回.
是否有任何解决方法可以删除/更新时间三元组,以便我们可以回答示例问题?
database-design - SCD(缓慢变化维度)数据库模型示例。这个有意义并且表现良好?
在客户 loopback.io 项目中,我需要跟踪/审核并提供撤消/重做功能,我发现最好的方法是 SCD 方法。
我在这里找到了一些东西:https ://en.wikipedia.org/wiki/Slowly_changeing_dimension然后我创建了这个模型:
有一些更好的正式模式来做吗?
我对SCD真的很陌生,希望有更多经验的人能看到它。
arangodb - 双时态与 Arangodb
是否有任何模式或示例可用于使用 ArangoDB 进行双时态建模?我正在评估我选择数据库的选项,ArangoDB 似乎具有所需的功能。
拉斯
google-cloud-datastore - Google Cloud Datastore 中的时态数据管理
是否有 api(如休眠等)来管理 Google Cloud Datastore 中的时间数据?基本上我需要在我的数据存储中维护双时态数据。有没有我可以用来轻松管理这个的api?
cassandra - Cassandra 中的 Datomic 和 BiTemporal 索引中的数据库作为值有什么不同?
Datomic数据库具有“数据库即值”的概念。这意味着您可以在某个时间点获得对数据库的引用- 并对其进行查询。
Cassandra中的BiTemporal Indexes似乎做了几乎相同的事情。
我的问题是:在 Cassandra 中,数据库作为 Datomic 和 BiTemporal 索引中的值有什么不同?