3

在 mysql 等关系数据库中,我习惯于通过设置deleted_at来进行软删除。然后检索SELECT 只需获取行 WHERE deleted_at IS NULL

我很困惑如何在 neo4j 数据库中实现软删除。我有多种方法,但不确定哪种方法或组合会有更多优势。

我还阅读了Neo4j:使用可选关系实现软删除,但没有帮助。

  1. 只需设置节点deleted_at的属性。
  2. 删除节点标签并通过前缀“_”更改,如“Student”将变为“_Student”
  3. 删除关系并通过前缀“_”更改,如“TEACHES”将变为“_TEACHES”

在neo4j中实现软删除的最佳方式或组合或其他方式是什么?

4

2 回答 2

4

哪种方式是最好的方式将是值得商榷的。如果您不需要软删除的实际日期,则可以根据需要应用/删除标签:

标记为“软删除”:

match (a {name: "foo"}) set a:deleted return a;

取消标记:

match (a {name: "foo"}) remove a:deleted return a;

如果您需要断言有关软删除的属性,那么将其建模为节点(例如“软删除事件”)然后通过关系将其链接到节点是有意义的。然后被删除的节点是具有“DELETED”关系的特定类型的任何节点,该关系转到软删除节点。然后,该软删除节点将具有 deleted_at 属性,以及有关您正在建模的删除事件的任何其他内容。

我不认为deleted_at节点中的简单属性是一个很好的解决方案,因为它会将节点信息与有关删除事件的信息混淆。我认为您正在尝试在这里建模删除事件。

于 2014-04-28T15:30:19.303 回答
2

我认为有deleted_at节点的属性。您可以在其中存储已删除的时间戳。

在获取节点信息时,您可以检查deleted_at IS NULL. 喜欢 -

  MATCH (n:node)
  WHERE n.deleted_at IS NULL
  RETURN n;

删除节点时可以获得的存储时间戳。

您还可以deleted_by在删除节点的用户之间建立关系。这样你就可以找出谁删除了节点。

于 2014-11-04T09:16:50.727 回答