2013-08-18 21 views
0

我正在玩Neo4j,但试图让我的头绕着图的概念。作为一个学习过程,我想将一个小的Postgres关系数据库模式移植到Neo4j上。有什么方法可以将它移植到Neo4j并发布“等效”关系查询?如何将关系数据库移植到Neo4j?

回答

1

恐怕不是。关系数据模型和图形数据模型是对现实世界域进行建模的两种不同方式。它需要人类的大脑(至少在2013年)才能理解该领域以便对其进行建模。

我建议你拿一张纸,用圆圈和箭头捕捉你的实体(节点)以及它们如何相互关联(关系)。然后,看看那张纸。瞧,你的新Neo4j数据模型。

然后,接受一个查询,希望得到回答,并试图找出如何在没有计算机的情况下执行此操作,只需在该纸上用手指跟踪节点和关系即可。一旦你明白了这一点,将你所做的一切翻译成Cypher查询。

看看neo4j.org,有很多例子。

2

是的,您可以将现有架构移植到图形数据库。请记住,这不一定是您数据的最佳模型,但它是一个起点。

它的容易程度取决于现有模式的质量。

与实体关系图中的实体对应的表定义了您的节点类型。在即将推出的neo4j 2.0中,您可以使用实体的名称来标记它们以使查找更容易。在旧版本中,您可以使用索引或手动标签属性。

假设最好的情况下,数据之间的所有关系都使用外键建模,节点之间的任何1:1关系可以被识别并接下来移植。

对于建模n:m关系的表格,标识相应的节点并添加它们之间的直接关系。

因此,例如假设表Author[id, name, publisher foreign key]Publisher[id, name]Book[id, title]written_by[author foreign key, book foreign key]

  • Author,PublisherBook中的每一行都成为节点。
  • 每个Author节点都与由外键关系标识的发布者建立关系。
  • 对于written_by每一行你,因为它表现添加Author节点和Book节点引用

对于Neo4j的查询我建议cypher之间的关系。 A2。0)查询一些作家找书会是什么样子:

MATCH (author:Author)-[:written_by]-(book:Book) 
WHERE author.name='Hugh Laurie' 
RETURN book.title