Свойства отношений Datomic ref

Я пытаюсь смоделировать схему, в которой list может иметь много items, а каждый item может принадлежать многим lists. Мне ясно, что у меня может быть тип ссылки :list/items для моделирования отношения, но я также хотел бы иметь атрибут rank, который определяет позицию элемента в каждом списке, где он существует. Как можно сделать такое?


person Dave Bryand    schedule 12.11.2015    source источник


Ответы (2)


Единственный ответ, который у меня есть — при условии, что позиционирование зависит от списка — это то, что вам нужно добавить косвенную сущность с атрибутом ранга. Это не очень приятно. Было бы неплохо, если бы можно было упорядочить отношение «многие», так как этот вариант использования существенно упростился бы.

person pete23    schedule 17.11.2015

Гетерогенные кортежи, добавленные в июне 2019 г., представляют собой новую модель моделирования. вариант здесь.

Значение атрибута, то есть v в 5-кортеже eavto, теперь само может быть кортежем. Это вектор clojure максимальной длины 8.

Официальное сообщение в блоге.

Обсуждение релиза в твиттере.

Обратите внимание, что пример в документах выше использует

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

что немного странно, так как речь идет о гетерогенныхкортежах, поэтому в случае 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 и размножение.

person mwal    schedule 24.04.2020