将示例关系数据模型转换为图形数据模型

Converting a sample relational data model to graph data model

我设计了一个关系数据模型及其图形数据模型。 我想知道我是否以正确的方式完成它以及我的图形数据模型是否正确。如果我的模型有任何错误或不明确之处,请发表评论。

正如您在图形数据模型中看到的那样,有 4 个标签:

  1. 公司
  2. 用户
  3. 技能
  4. 项目

并且您可以看到带有标签的每个节点都有其属性,并且连接表被转换为节点之间的关系。 我想知道我应该如何处理 "Primary keys",例如 userIDSkillID

关系数据模型:

图形数据模型:

关于主键问题:

事实上,Neo4j 节点和关系有一个内部唯一 ID,可以使用 id() 函数访问:

match (d)-[r]-()
return id(d) as nodeId, id(r) as relId

但是,您的应用程序不应依赖这些 ID,因为当删除节点或关系时,Neo4j 会重复使用它们。 Neo4j documentation 表示:

Neo4j reuses its internal ids when nodes and relationships are deleted. This means that applications using, and relying on internal Neo4j ids, are brittle or at risk of making mistakes. It is therefore recommended to rather use application-generated ids.

更多here.

所以,如果你真的想要一个主键,我认为你有两个主要选择:

  1. 在应用程序级别管理主键。即:在访问 Neo4j 数据库的应用程序代码中创建并分配唯一 ID。

  2. Use GraphAware UUID plugin。 GraphAware UUID 是一个简单的库,它可以透明地将 UUID 分配给图中新创建的节点和关系,并确保没有人可以(无意或有意)更改或删除它们。