如果你事后发现了一个事实,你如何Datomic?

时间:2016-09-25 15:59:42

标签: datomic

我对EAVT的理解是T必须在将事实插入Datomic时。通常在我的工作中,事实可以在它们发生几个月后插入系统。显然,我可以在我的模式中添加“at”属性,但这似乎打败了Datomic的大部分价值。是否有方便处理这种时间断开的模式或技术?

我想避免的主要问题是:

t=1: I receive a fact that at t=0 x=5
t=3: I receive a fact that at t=2 x=6
t=5: I receive a fact that at t=4 x=7

什么是x @ t = 2.5?

要回答这个问题,我想我必须查询x的整个历史记录,并遍历字段中的自定义。或者做一些二进制的搜索。似乎都没有吸引力。

2 个答案:

答案 0 :(得分:1)

原则上,:db/txInstant是系统知道事实的时间记录。如果知道的事实是“当某个事件发生时”,我认为添加该知识的属性没有问题,例如: :person/birthday:historical-event/date-time

我唯一一次避免添加日期属性的时间是“当系统知道这种情况时”和“发生这种情况时”与相同的。例如,“当todo项目进入数据库时​​,”用户何时创建此todo项目可以定义为 :db/txInstant

答案 1 :(得分:0)

蒂姆波特是正确的。域时间(在“现实世界”中发生的事情)和系统时间(当Datomic发现它的时候)之间的区别是一个重要的区域,并且明确地建模域时间绝对是一个很好的方法。与系统时间不同。