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