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

Sql server 将示例关系数据模型转换为图形数据模型,sql-server,neo4j,relational-database,data-modeling,graph-databases,Sql Server,Neo4j,Relational Database,Data Modeling,Graph Databases,我设计了一个关系数据模型和它的图形数据模型。 我想知道我是否以正确的方式完成了它,以及我的图形数据模型是否正确。如果我的模型有任何错误或不明确之处,请留下评论 如图数据模型中所示,有4个标签: 公司 使用者 技巧 计划 您可以看到,每个带有标签的节点都有自己的属性,并且连接表被转换为节点之间的关系。 我想知道我应该如何处理像userID或SkillID这样的“主键” 关系数据模型: 图形数据模型: 关于主键问题: 事实上,Neo4j节点和关系有一个内部唯一ID,可以使用以下函数访问: matc

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

如图数据模型中所示,有4个标签:

  • 公司
  • 使用者
  • 技巧
  • 计划
  • 您可以看到,每个带有标签的节点都有自己的属性,并且连接表被转换为节点之间的关系。 我想知道我应该如何处理像
    userID
    SkillID
    这样的“主键”

    关系数据模型:

    图形数据模型:


    关于主键问题:

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

    match (d)-[r]-()
    return id(d) as nodeId, id(r) as relId
    
    但是,您的应用程序不应该依赖这些ID,因为当删除节点或关系时,Neo4j会重用这些ID。报告说:

    当节点和关系被删除时,Neo4j重用其内部ID 删除。这意味着应用程序使用和依赖内部 Neo4j ID易碎或有出错风险。因此 建议使用应用程序生成的ID

    更多

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

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

  • 。GraphAware UUID是一个简单的库,它透明地将UUID分配给图形中新创建的节点和关系,并确保任何人都不能(意外地或有意地)更改或删除它们


  • 什么是“用户”?用户就是人。我想我为实体选择了一个错误的名称。我所说的用户是指一个人。我认为“人”是更好的替代品。你的第一个问题可能会产生基于观点的答案。这种问题在StackOverflow是不受欢迎的。但是,乍一看,您的数据模型看起来还不错。但是请记住,在建模图形数据库时,一个好的做法是根据您的查询需求创建模型。因此,在开始建模之前,请考虑您希望向数据库提出的查询。我回答了你关于主键的问题,请看一看。@PTTT也请看一看,谢谢。事实上,我正在做一个关于图形数据库的演示。我想向观众展示一个关系数据模型并运行一些sql查询,然后向他们展示图形数据模型和相同的cql查询。实际上,我尽了最大努力使我的关系模型独一无二,我不想向他们展示已经存在的例子。所以我试着给自己举个例子,然后我使用了一些连接表,这样我就可以用连接进行sql查询,然后比较等效的cql和sql查询。您认为这是一个展示graphdatabase优势的好例子吗?谢谢。如果我们保留主键呢??我的意思是,如果我保留技能id,例如??错了吗?@PTTT不客气!不,没有错。如果您使用GraphAware UUID插件,您可以使用配置参数
    com.GraphAware.module.UIDM.uuidProperty
    自定义属性名称以存储UUID。