【发布时间】:2015-08-21 12:24:54
【问题描述】:
我偶然发现了与neo4j - Relationship between three nodes 相同的问题。我是 Neo4J 的新手,想将关系数据库建模为图形。
我有A、B、C三种数据。B、B1的一个实例,可以属于C、C1的一个实例,A、A1的一个实例可以属于B1和C1,但是如果和仅当 B1 属于 C1。这里的问题是,我也可以让 A1 属于属于 C1 的 B2,而 A1 也属于属于 C2 的 B1。这将是三个合法的、独立的组合。因此,在我的数据库中,我将有一个连接表,在记录中我将保留三个 id 的组合,表示由实例形成的关系。
现在,据我所知,超边类似于我正在搜索的内容 (http://neo4j.com/docs/stable/cypher-cookbook-hyperedges.html)。首先,我想添加这样的关系:
A-[:PART_OF]->三重
B-[:PART_OF]->三重
C-[:PART_OF]->三重
第一个问题/问题:如果要删除 B 类实例,则三重节点将保留。我猜我在删除东西时必须以某种方式处理这个问题?
第二个问题/问题:我的主要问题是,如果我添加更多的关系会更有效吗?例如 A-[:BELONGS_TO]->C。所以,如果我想要 A1 所属的所有类型 C 实例,我可以一跳返回结果。关系遍历的数量将少于必须访问的“三重”类型节点。我想基本上我在问 Neo4j 如何在内部寻找模式(它从哪里开始,它是否重新检查节点等)。因为我猜测(可能是错误的)如果我想要 A1 所属的 Cs,我会写如下内容:
匹配 A1-[:PART_OF]->三重
该查询将如何工作?首先检索所有三元组 A1 的一部分,然后是所有 C 类型的一部分,最后返回匹配项?
有什么提示吗? 提前致谢。
【问题讨论】:
标签: mysql graph neo4j cypher graph-databases