所以我刚刚完成了本教程,并且我不清楚一些事情。然而,主要的一个是你如何决定什么是关系什么时候它应该是一个节点? 例如,在电影数据库中,存在显示谁在哪部电影中扮演的关系。该关系的一个属性是角色。但是,如果它是一系列电影怎么办?电影之间的角色可能是不变的(例如杰克瑞恩在“寻找红色十月,爱国者游戏等”中)。
我们可能也想要某种角色生物,这在电影之间显然会保持不变。更糟糕的是,演员可能会从一部电影转变为另一部电影(亚历克·鲍德温,然后是哈里森·福特。)还有很多其他电影(例如詹姆斯·邦德)。
即使演员没有改变(哈利波特中的主要角色),角色也是不变的。那么,角色在什么时候会成为一个独立的节点?如果是这样,我可以有3方式关系(演员 - 角色 - 电影)吗?假设我从一开始就认为它是一种关系然后,在线下,决定它应该是一个节点,是否有一种简单的方法来通过数据库并转换它?
答案 0 :(得分:0)
没有办法转换你的数据模型。当你开始自己的数据库时,首先花时间找一个合适的模式。没有理想的方法来创建模式,并且有许多不同的模型适合相同的情况而不是完全错误。
我的策略是为关系本身提供更少的信息。我只添加与关系直接相关的属性,并将所有其他数据存储在节点中。还要考虑可用于遍历图形的属性。例如,您可能需要一些标志甚至不同的标签用于关系,即使它们或多或少相同。 apoc.algo.aStar
仅包含您想要的关系类型(您可以通过为某些节点提供特殊的关系类型来排除它们)。因此,请记住,您要查看稍后可能使用的过程。
尝试尽可能简单地创建模式,并找到一种方法,以便在节点和值得关系的方面保持一致。不要混淆。
选择对您有意义的设计! (device 1)-[cable]-(device 2)
vs (device 1)-[has cable]-(cable)-[has cable]-(device 2)
在这种情况下我更喜欢第一个,因为[has cable]
不会再提供信息。不管我上面写的是什么,我会在这个[cable]
关系中有很多信息,但它对我来说完全有意义,因为我不想在设备节点中搜索有线信息。
为您的示例提供角色自己的节点也是有效的方法。例如,如果您想特别查询哪些角色具有相同的角色,我将完全为角色提供额外的节点。
要点: 想想你想对数据做些什么,并选择最简单的模型。