【发布时间】:2020-01-16 16:23:33
【问题描述】:
我刚开始使用 neo4j,我对如何建模 users->post->cmets 模式有些疑问......实际上我做了这样的事情:
type User {
uuid: ID!
username: String
posts: [Post] @relation(name: "HAS_POSTS", direction: "OUT")
comments: [Comment] @relation(name: "POST_COMMENTS", direction: "OUT")
}
type Post {
uuid: ID!
text: String
owner: User @relation(name: "HAS_POSTS", direction: "IN")
comments: [Comment] @relation(name: "HAS_COMMENTS", direction: "OUT")
}
type Comment {
uuid: ID!
text: String
owner: User @relation(name: "POST_COMMENTS", direction: "IN")
}
保存引用对象的 uuid,例如,每个帖子都将所有者 uuid 作为属性,并且它也具有关系(对于 cmets 也是如此),但我不是 100% 认为这是正确的。阅读这篇文章: https://neo4j.com/developer/modeling-designs/
我理解为什么使用关系比属性更好,但是如果我想编辑帖子并确保只有帖子的所有者有权这样做,我想通过 uuid 搜索帖子用户的帖子和 uuid,然后在该特定节点上设置数据......像这样:
MATCH (p:Post) WHERE p.uuid = post.uuid AND p.owner = $cypherParams.user.uuid
SET p += post
RETURN p
这种模式好吗?还是保存所有者属性没有用,并且会破坏我的数据的一致性?
非常感谢
【问题讨论】:
标签: database-design graph neo4j schema