我有一个关于 Datomic 更惯用的模式的问题。
假设我们有实体User
和。Post
Topic
Post
可以属于Topic
和User
其他Post
(回复)。现在,我应该,
a) 创建一个:posts
属性,它只是一个Post
s 列表,并将其注入到每个需要引用多个Post
s 的实体中?
或者
b) 建立更明确的关系,例如 aPost
有一个:post/author
属性是对用户的引用,也许还有一个:post/belongs-to
属性可以引用 aTopic
或另一个Post
?
观察:如果我做b,我似乎得到了更多的语义关系。例如,我可以这样做(:post/_author user-entity)
,这比现在更能描述他们的关系商店的性质(因为,a has(:posts user-entity)
是什么意思?那些是s favorited s,authored s,还是什么?)User
:posts
User
Post
Post
b的另一个副作用是我可以在Post
不改变任何其他实体的情况下创建一个新实体。如果我做a,我需要创建Post
并将其插入到 的:posts
属性中User
,需要两个操作而不是一个。
但是,我有一种感觉,a可能是更惯用的方式。例如,如果引用而不是通过属性进行引用:posts
,如果我想这样做,似乎更容易看到属性列表如何随时间变化。User
:posts
Post
User
:post/author
什么会更可取,为什么?