Datomic 引用关系的属性

Properties on Datomic ref relationships

我正在尝试建立一个模式,其中 list 可以有很多 items,每个 item 可以属于很多 lists。我很清楚,我可以使用 :list/items ref 类型来为关系建模,但我还想使用 rank 属性来确定项目在每个列表中的位置。怎么可能做出这样的事情?

我唯一的答案 - 假设定位依赖于列表 - 是您需要添加一个具有排名属性的间接实体。这不是很愉快。如果可以对多关系进行排序,那就太好了,因为这个用例会大大简化。

Heterogenous tuples,于 2019 年 6 月添加,是此处的新建模选项。

一个属性值,即 eavto 5 元组中的 v,现在本身可以是一个元组。这是最大长度为 8 的 clojure 向量。

官方blog post公告。

关于 twitter 版本的讨论。

请注意上面文档中的示例使用

:db/tupleTypes [:db.type/long :db.type/long]

这有点奇怪,因为点是 heterogenous tuples,所以在 OP 的情况下,这将是:

{:db/ident       :list/item
 :db/valueType   :db.type/tuple
 :db/tupleTypes  [:db.type/ref :db.type/long] ; ref to item, rank
 :db/cardinality :db.cardinality/many}

或者您可以使用值类型而不是项目的 ref,如果这适合您的话。

要在数据记录中使用它,您可以使用 tuple and untuple 函数。