我正在考虑学习图形数据库(比如neo4j),但我很好奇图形数据库中是否有这样的设施,例如,如果我这样做:
Step 1: create: A --> B --> C
Step 2: create: D --> B --> E
Step 3: create: F --> G --> E
这应该自动导致存储的图形如下:
A ---> B ----> C
/|\ \
D -----| \--> E
/|\
F ---> G --------|
这里公共节点B和E被合并(无需以编程方式检查这些节点的先前存在)。在一个现实世界的例子中,将有1000个这样的B和E将在关系DB中实现,如下所示:
FK = Foreign Key .. X Y Z are keys for three primary tables.
___________ ________ _____________ ________
X | FK(Y) Y | ... FK(Y) | FK(Z) Z | ..
---|------- --|----- ------|------ ---|----
A | FK(B) B | ... FK(B) | FK(C) C | ..
D | FK(B) G | .. FK(B) | FK(E) E | ..
F | FK(G) FK(G) | FK(E)
在RDB中,(例如,当我插入关系D - > B时)我必须以编程方式在第二个表中搜索重复的对象B(或者在尝试插入相同的内容时查找失败代码对象进入它然后得到B的外键与D一起。我希望在图DB中,这样的事情由DB来处理。
答案 0 :(得分:3)
你应该看一下v2.0的新MERGE
子句,它允许你有一个后续的ON MATCH
和ON CREATE
子句,这样你就可以在一个节点上采取一个特定的动作找到vs创建。
请参阅2.0M3 blog post了解简介(2.0M4是最新版本,但MERGE是在M3中介绍的),以及“2.0中的新功能”video。