如何将关系数据库移植到Neo4j?

时间:2013-08-18 06:01:48

标签: neo4j cypher

我正在玩Neo4j,但试图了解图形概念。作为一个学习过程,我想将一个小的Postgres关系数据库模式移植到Neo4j。有什么方法可以移植它并向Neo4j发出“等效”关系查询吗?

5 个答案:

答案 0 :(得分:2)

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

它的简单程度取决于现有架构的质量。

与entity-relationship-diagram中的实体对应的表定义了您的节点类型。在即将推出的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]为例。

  • AuthorPublisherBook中的每一行都成为一个节点。
  • 每个Author节点都与外键关系标识的发布者建立关系。
  • 对于written_by中的每一行,您在Author节点和引用的Book节点之间添加关系

对于neo4j中的查询,由于其表现力,我建议使用cypher。某个作者查找书籍的(2.0)查询看起来像:

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

答案 1 :(得分:2)

您实际上有几种选择:

答案 2 :(得分:2)

检查出来:

musicbrainz - > Neo4j的 https://github.com/redapple/sql2graph/tree/master/examples/musicbrainz

Neo4j Sql-importer https://github.com/peterneubauer/sql-import

祝你好运!

答案 3 :(得分:1)

我不敢。关系数据模型和图数据模型是对现实世界域建模的两种不同方式。它需要一个人类大脑(至少截至2013年)来理解该领域,以便对其进行建模。

我建议你拿一张纸,用圆圈和箭头捕捉你的实体(节点)以及它们彼此之间的关系(关系)。然后,看看那张纸。 Voila,您的新Neo4j数据模型。

然后,进行一个您想要回答的查询,并尝试弄清楚如何在没有计算机的情况下做到这一点,只需在一张纸上用手指追踪您的节点和关系即可。一旦你弄明白了,就把你所做的事情翻译成Cypher的查询。

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

答案 4 :(得分:1)

这个工具就是这样做的。 将任何关系数据库导入neo4j https://github.com/jexp/neo4j-rdbms-import

相关问题