【问题标题】:Neo4j Constraining Values, Labels or PropertiesNeo4j 约束值、标签或属性
【发布时间】:2019-02-04 10:03:57
【问题描述】:

我来自 RDBMS 背景并试图围绕属性图(尤其是 neo4j)。最让我恼火的是,似乎没有一种方法可以约束诸如

  • 节点标签
    • 没有什么可以阻止:person:Pperson:PURSONNN
  • 关系
    • 没有什么可以确保您没有添加不知道如何使用的边缘应用程序。例如,可能存在“CanViewAccount”关系,但其他人出现并天真地构建了边缘“CanView”
  • 没有约束节点或边的属性。
    • 我可能想要一个 :Person 的“UserType”,它应该只是少数几个预定义选项之一。

这是 RDBMS 101 的东西(参照完整性约束),但我不确定是否以及如何在 Neo4j 中做类似的事情。

【问题讨论】:

    标签: database-design neo4j constraints data-modeling


    【解决方案1】:

    你应该知道 Neo4j 是少架构的,这就是为什么你可以做你列出的所有事情。

    另一方面,Neo4j 有一些限制,例如:

    • 标签属性的唯一性约束。例如,属性email 在节点:Person 上应该是唯一的
    • 对标签属性的要求约束。例如,属性email 必须存在于节点:Person
    • 对关系类型的属性的要求约束。例如,属性since 必须存在于关系:KNOWS

    在 EE 版本中,您可以在一个或多个字段上创建一个主键(称为 node key

    【讨论】:

    • 感谢您的信息。我遇到的大多数 NoSQL DB 似乎都将整个“无模式”的事情吹捧为一件好事,但完全没有这种支持有点可惜。感觉我的选择是要么寄希望于最好的结果,要么修补第二个系统(无论是简单的 KVM 数据库、关系数据库还是其他任何东西),以限制它成为一个由不同术语和元素组成的难以管理的网络。跨度>
    • 少架构也有很多优点,但这不是这里的问题。在大多数用例中,写查询总是来自同一个管道,因此很容易处理/约束模式,但它将在应用层中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2017-11-21
    • 2017-06-11
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多