我正在尝试使用 Dgraph 作为我的主数据库。我有一个简单的系统,它有两个域实体,即。User
和Product
。它们都具有某些属性,在 Dgraph 中表示为边/属性。它们都有一个共同的属性名称,即字符串。如果我对两个节点使用相同的谓词name
,那么当我使用has
函数查找所有具有name
边缘的用户时,就会产生问题。has函数还返回带边的Product
节点。name
这是不可取的。
在这种情况下,对领域实体进行建模时,正确的方法或建议是什么?我可以想到两种方法:
- 所有节点都有一条共同边
type
,以唯一标识相似节点。这里的值type
是User
或Product
。这大致类似于传统的表/列类比,其中将和type
表示为具有本地化属性的上下文的列。table
edges
type
- 每个节点类型都有一个单独的谓词。因此,与其拥有
name
,不如更喜欢两个谓词user_name
和product_name
。
我相信这个问题只存在于像 Dgraph 这样的 RDF/Triplestore 数据库,而不是像 Neo4j 这样的属性图,因为每个节点都包含自己的属性。