Database design Neo4j/停用对象的最佳做法是什么?

Database design Neo4j/停用对象的最佳做法是什么?,database-design,graph,neo4j,graph-databases,Database Design,Graph,Neo4j,Graph Databases,让我们假设一个用户想要出售他的汽车。 从技术上讲,相应的Car节点将在图中创建 现在,用户改变主意,想要保留自己的汽车,这意味着要将其从销售区域中移除。 因此,应该删除Car节点,但不能删除物理节点(比如99%的应用程序)。 大多数处理RDBMS的应用程序都会将一个标记Activated置于false或N 对于Neo4j 2.X,我想到了两种解决方案: 创建取消节点,通过关系取消链接到汽车。因此,遵循的原则,将事实建模为的节点 当汽车最初创建时,添加一个标签激活,并在取消时将其删除 通过这种

让我们假设一个用户想要出售他的汽车。
从技术上讲,相应的
Car
节点将在图中创建

现在,用户改变主意,想要保留自己的汽车,这意味着要将其从销售区域中移除。
因此,应该删除
Car
节点,但不能删除物理节点(比如99%的应用程序)。
大多数处理RDBMS的应用程序都会将一个标记
Activated
置于
false
N

对于Neo4j 2.X,我想到了两种解决方案:

  • 创建
    取消
    节点,通过关系
    取消
    链接到
    汽车
    。因此,遵循的原则,将事实建模为的节点
  • 汽车
    最初创建时,添加一个标签
    激活
    ,并在取消时将其删除
通过这种方式,有两种方法可以检索要出售的当前汽车:

  • 匹配(c:汽车:激活)返回c

  • 用Neo4j 2.x匹配(c:Car)而不是(c),我会更改标签,主要原因是:

    • 可能会有很多取消项,它们可能会创建一个密集的节点,很难遍历
    • 标签很容易用索引返回,所以随着您的增长,您可以使用索引过滤更多内容
    • 由于这只是一个标记,而不是像日期之类的标量值,因此标签在这里非常有意义,您不需要自由地从/到取消节点创建更多关系-过滤和排序可能很好,并且与支持此标签的索引配合使用效果很好

    对于Neo4j 2.x,我会更改标签,主要原因是:

    • 可能会有很多取消项,它们可能会创建一个密集的节点,很难遍历
    • 标签很容易用索引返回,所以随着您的增长,您可以使用索引过滤更多内容
    • 由于这只是一个标记,而不是像日期之类的标量值,因此标签在这里非常有意义,您不需要自由地从/到取消节点创建更多关系-过滤和排序可能很好,并且与支持此标签的索引配合使用效果很好

    对于Neo4j 2.x,我会更改标签,主要原因是:

    • 可能会有很多取消项,它们可能会创建一个密集的节点,很难遍历
    • 标签很容易用索引返回,所以随着您的增长,您可以使用索引过滤更多内容
    • 由于这只是一个标记,而不是像日期之类的标量值,因此标签在这里非常有意义,您不需要自由地从/到取消节点创建更多关系-过滤和排序可能很好,并且与支持此标签的索引配合使用效果很好

    对于Neo4j 2.x,我会更改标签,主要原因是:

    • 可能会有很多取消项,它们可能会创建一个密集的节点,很难遍历
    • 标签很容易用索引返回,所以随着您的增长,您可以使用索引过滤更多内容
    • 由于这只是一个标记,而不是像日期之类的标量值,因此标签在这里非常有意义,您不需要自由地从/到取消节点创建更多关系-过滤和排序可能很好,并且与支持此标签的索引配合使用效果很好

    非常感谢Peter,让我们来看看标签;)如果我想让用户指出取消的原因呢。我是否应该仅仅创建一个节点
    CancelReason
    链接到标签
    已激活
    被丢弃的汽车?对于2.1.X,由于引擎盖下的一种算法变体,似乎仍然可以有效地遍历一个重节点,不能吗?如果这是一个自由形式的取消原因,我会在汽车上添加一个Cancel reason属性。如果有少量的可能性,我会为他们做一个标签<代码>取消了_缺陷
    等。很好:)因此,如果我能很好地理解,由于2.X中创建标签的功能,“将事实建模为节点”通常可能由标签而不是节点实现。=>我们可以说“将某些事实建模为标签”:?我说得对吗?非常感谢彼得,让我们来看看标签;)如果我想让用户指出取消的原因呢。我是否应该仅仅创建一个节点
    CancelReason
    链接到标签
    已激活
    被丢弃的汽车?对于2.1.X,由于引擎盖下的一种算法变体,似乎仍然可以有效地遍历一个重节点,不能吗?如果这是一个自由形式的取消原因,我会在汽车上添加一个Cancel reason属性。如果有少量的可能性,我会为他们做一个标签<代码>取消了_缺陷等。很好:)因此,如果我能很好地理解,由于2.X中创建标签的功能,“将事实建模为节点”通常可能由标签而不是节点实现。=>我们可以说“将某些事实建模为标签”:?我说得对吗?非常感谢彼得,让我们来看看标签;)如果我想让用户指出取消的原因呢。我是否应该仅仅创建一个节点
    CancelReason
    链接到标签
    已激活
    被丢弃的汽车?对于2.1.X,由于引擎盖下的一种算法变体,似乎仍然可以有效地遍历一个重节点,不能吗?如果这是一个自由形式的取消原因,我会在汽车上添加一个Cancel reason属性。如果有少量的可能性,我会为他们做一个标签<代码>取消了_缺陷等。很好:)因此,如果我能很好地理解,由于2.X中创建标签的功能,“将事实建模为节点”通常可能由标签而不是节点实现。=>我们可以说“将某些事实建模为标签”:?我说得对吗?非常感谢彼得,让我们来看看标签;)及