如何将关系型数据库建模为neo4j图形数据库?

5

我有一个约30张表的关系数据库,我想将其转换为neo4j图形数据库,但我不知道从哪里开始......是否有一般方法可以将表格和/或元组转置为图形模型?(关系属性、一个或多个图形?)最好的文档来源是什么?

感谢您的任何帮助,

此致敬礼


2
我猜问题是“你想在其中建模什么?”如果你谈论的是从关系模型到图形模型的简单转移,我想你做错了。使用它们中的一个来处理你认为它们能更好地处理的部分。 - MarcoL
你希望通过这个实现什么好处?为什么你想要回到像60年代和70年代那样的过程式数据操作呢? - Erwin Smout
3个回答

3
首先,如果可能的话,我建议不要将关系型数据库作为转换为图形模型的“参考”。由于关系建模中常见的错误和陷阱往往会传递到图形模型中并引入其他奇怪的问题。实际上,如果您有源ER图,则可能是一个更好的起点,因为它已经是一个图形。甚至可以考虑重新建模您的领域!
话虽如此,从基本角度来看,您可以将大多数表格视为表示节点类型(例如“用户”或“电影”)的节点类型,其中联接表和键表示关系类型。
从我的角度来看,一个很好的起点是确定一些您的图形/数据源应该回答的问题。将这些问题写下来,并尝试想出代表这些问题的Cypher查询。通常情况下,图形模型自然而然地产生,而且并不难。
如果您还没有,请强烈建议从这里获取Graph Databases电子书的(免费)副本:http://graphdatabases.com/ 它包含了很多有关如何开始建模您的域以及在习惯于以关系方式处理事情时需要考虑的内容。它还包含一些有关Cypher的材料,尽管Neo4j网站(neo4j.org)有一个参考手册,其中包含大量关于Cypher的最新信息。
希望这可以帮到您!

3
“这种转换没有一种万能的解决方案,因为并不是所有的数据模型都适合图形建模,并且每个应用程序都是独特的。 但是这样说...通常,您的“基本”表(例如User,Role,Order,Product)将成为节点,而“连接表”(又名buster表)将成为关系的候选对象(例如UserRole,OrderLineItem)。 记住,在图形中,通常在两个特定节点之间只能有一种给定类型的关系 - 因此,在上面的示例中,如果您的系统允许同一产品重复出现在订单中,则会导致问题。”
“外键是您与其他表建立关系的第二个来源,请查看它们是否有意义作为关系或属性。”
“只需记住您正在尝试通过数据模型解决什么问题 - 如果要遍历对象以查找关系和距离等内容,则图形可能非常适合。如果您正在建模电子商务应用程序,并且需要处理单个嵌套对象(例如订单 ->行项目 ->产品 -> SKU),则关系模型可能是正确的选择。”
“希望我的建议对您有所帮助。”

1
+1,但请注意,在neo4j中,您可以在节点之间拥有多个相同类型的边缘 - 请参见此问题 - DNA
哇...谢谢...我之前完全以为你只能有一个 =(A)-[r:REL_TYPE]-(B)...这让更多的模型得以开启。 - Dan G

0

正如已经提到的,从关系数据库模型到图形数据库模型并没有什么神奇的转换。

您应该查找原始实体及其关系,以便找到节点、属性和关系。并且始终记住您将执行哪种类型的查询。

正如BtySgtMajor所说,"Graph Databases"是一个很好的起点,并且它是免费的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接