Datomic ref关系的属性

时间:2015-11-12 21:47:42

标签: datomic

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

2 个答案:

答案 0 :(得分:1)

我唯一的答案 - 假设定位是依赖于列表的 - 是你需要添加一个具有rank属性的间接实体。这不是很愉快。如果可以订购许多关系会很好,因为这个用例会大大简化。

答案 1 :(得分:1)

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

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

blog post官方公告。

twitter上讨论发行版本。

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

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

这有点奇怪,因为要指出的是 hetero 通用元组,所以对于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}

或者,如果适合您,则可以使用值类型代替项目的引用。

要在数据记录中使用此功能,可以使用tupleuntuple函数。