我正在玩Neo4j,但试图了解图形概念。作为一个学习过程,我想将一个小的Postgres关系数据库模式移植到Neo4j。有什么方法可以移植它并向Neo4j发出“等效”关系查询吗?
答案 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]
为例。
Author
,Publisher
和Book
中的每一行都成为一个节点。 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