У меня есть вопрос относительно того, какая схема более идиоматична для Datomic.
Допустим, у нас есть объекты User
, Post
и Topic
.
Post
может принадлежать Topic
, User
и другим Post
(ответы). Теперь, я должен,
а) Создать атрибут :posts
, который представляет собой просто список Post
, и внедрить его в каждую сущность, которая требует ссылки на количество Post
?
or
b) Установить более явные отношения, например, чтобы Post
имел атрибут :post/author
, который является ссылкой на пользователя, и, возможно, атрибут :post/belongs-to
, который может ссылаться либо на Topic
, либо на другой Post
?
Наблюдения: Если я делаю b, я получаю больше семантических отношений. Я могу, например, сделать (:post/_author user-entity)
, который лучше описывает характер их магазина отношений, чем (:posts user-entity)
(поскольку, что означает, что User
имеет :posts
? Это User
s избранные Post
s, авторские Post
s или что?)
Еще один побочный эффект b заключается в том, что я могу создать новый Post
, не изменяя никакой другой объект. Если я делаю a, мне нужно создать Post
, а также вставить его в атрибут :posts
User
, что требует двух операций вместо одной.
Однако у меня есть ощущение, что a может быть более идиоматичным способом сделать это. Кажется, например, что было бы легче увидеть, как список атрибута :posts
изменился с течением времени, если я захочу это сделать, если User
ссылается на :posts
, а не имеет Post
ссылку User
через атрибут :post/author
.
Что было бы предпочтительнее и почему?