在像mysql这样的关系数据库中,我习惯通过设置 deleted_at 进行软删除。然后检索 SELECT只获取行WHERE deleted_at IS NULL 。
我很困惑如何在neo4j数据库中实现软删除。我有多种方法,但不确定哪种方法或组合会有更多优势。
我也读过Neo4j: implementing soft delete with optional relationships但没有帮助。
哪种方式或组合或其他方式在neo4j中实现软删除?
答案 0 :(得分:4)
哪种方式最好的方式是值得商榷的。如果您不需要软删除的实际日期,则可以根据需要应用/删除标签:
标记为“软删除”:
match (a {name: "foo"}) set a:deleted return a;
取消标记:
match (a {name: "foo"}) remove a:deleted return a;
如果需要断言关于软删除的属性,则将其建模为节点(例如“软删除事件”)然后通过关系将其链接到节点是有意义的。然后,被删除的节点是具有“删除”关系的特定类型的任何节点,该关系将转到软删除节点。然后,该软删除节点将具有deleted_at属性,以及有关您正在建模的删除事件的任何其他内容。
我不认为节点中的简单deleted_at
属性与解决方案一样好,因为它会将节点信息与删除事件的信息混淆。我认为你试图在这里建模删除事件。
答案 1 :(得分:1)
我认为节点有deleted_at
属性。您可以在其中存储已删除的时间戳。
在获取节点信息时,您可以检查deleted_at IS NULL
。
喜欢 -
MATCH (n:node)
WHERE n.deleted_at IS NULL
RETURN n;
存储删除节点时可以获得的时间戳。
您还可以在删除节点的用户之间建立关系deleted_by
。这样你就可以找出谁删除了节点。