在为同一属性添加相同值时,Datomic会做什么?

时间:2015-01-08 02:17:58

标签: datomic

我对Datomic非常陌生,但我看到Datomic的历史保留价值 - 考虑我们在申请中需要什么。

我的基本问题是,Datomic是否有助于停止向属性复制值(让我们说我继续添加名称="我的名字"再次因为用户按下保存按钮而不对名称进行任何更改)?

我们的应用程序需要的另一件事是能够查询已批准的信息而不是最新的更改。我的问题是,我可以根据这些属性向交易和查询数据添加属性("已批准","建议"等)?

谢谢!

2 个答案:

答案 0 :(得分:1)

在Datomic中,对象(或Clojure贴图)被分解为数据(也就是与其所有者关联的键/值对的元组)。

  1. 对于问题一,您可以在Datomic架构中将“name”属性设置为unique。顺便说一下,建议对属性使用名称空间限定的关键字,例如:user/name

  2. 只需将已批准信息的密钥设置为架构中的“多个”

    即可

    {:comment / approved {:db / cardinality:db.cardinality / many}}

答案 1 :(得分:1)

  1. 不会再次记录重复的数据。添加已存在的属性/实体的调用将被处理为upserts。如果您定义了唯一属性,则根据您是选择“值”还是“身份”,重复的断言可能会失败或重叠,请参阅文档herehere

  2. 您可以注释交易。有关这样做的说明,请参阅文档here,您可以在github存储库中找到example日期数据库,特别是this section

  3. (def db (:db-after @(d/transact conn [{:db/id (d/tempid :db.part/user) :story/title "ElastiCache in 5 minutes" :story/url "http://blog.datomic.com/2012/09/elasticache-in-5-minutes.html"} {:db/id (d/tempid :db.part/tx) :source/user editor}])))