Я надеялся продолжить обсуждение этого вопроса SO и получить более подробную информацию о реализации.
Мои требования включают в себя разрешение администратору определять теги для отношения, количество которых произвольно, вовлеченные сущности произвольны, а вовлеченные сущности не являются контингентными (т. е. не Component
сущности).
Для надуманного примера, User
может иметь много Projects
. У Project
может быть много Users
.
Администратор создает произвольное количество тегов для назначения связанным пользователям для каждой связи, например. Owner
, Contributor
, VIP
и т. д. для User
до Project
.
Из того, что я понимаю в этом ответе, простого ref
недостаточно, и мне нужно будет создать дополнительный объект, что-то вроде этого -
Соответствующий атрибут Project
:db/ident :project/associations
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many
Соответствующий атрибут User
:db/ident :user/associations
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many
Соответствующие Association
атрибуты
:db/ident :association/related-ents
:db/valueType :db.type/string
:db/cardinality :db.cardinality/many
:db/ident :association/assoc-id
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
:db/ident :association/tag
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
Соответствующий атрибут Tag
:db/ident :tag/name
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one
Это насколько я понял. Мне не ясно, как построить сущность association
идиоматически-Datomic.
Чтобы найти связанные отношения на данном Project
, включая, помимо прочего, Users
, а также найти отношения, где relationship tag = Contributor
, я должен
1) Перетащите
refs
наProject
+User
и получите данные черезAssociations
? то есть вернуть все ассоциации, гдеassociation/related-ents
содержитUser-Id = foo
2) Что-то совсем другое.
Полагаю, мой вопрос сводится к тому, где хранить ref
для эффективного поиска? Следует ли использовать другой db.type
вместо string
или другую конструкцию для association
, которая необходима? Нужны ли вообще project/associations
и user/associations
refs
?
Цените любое понимание.
Обновить
Немного поразмыслив, я думаю, что споткнулся о refs
различных сущностей. Мне интересно, могу ли я просто иметь associations/relatedEnts
, который сам по себе является ссылкой, которая содержит 2 идентификатора Datomic db + тег и отбрасывает все остальные перечисленные атрибуты. Это идеально?
:db/ident :association/relatedEnts
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/many
:db/ident :association/tag
:db/valueType :db.type/ref
:db/cardinality :db.cardinality/one
Starting Points
,Lunch
,Finish Line
или любое количество произвольных тегов, которые невозможно предсказать заранее. - person nrako   schedule 20.10.2016