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,如果这适合您的话。
我正在尝试建立一个模式,其中 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,如果这适合您的话。