在我们的 Oracle 11g 数据库中,我们有一个表,它有一个主键 I_Node (int) 和一个名为 I_Parent_Node (int) 的列,它引用回同一表中的另一条记录。根节点的 I_Parent_Node = null。通过这种方式,我们形成了一个由节点、叶子、分支组成的树结构,无论您想如何称呼它们。
我们经常需要一次删除整个节点分支,这意味着一个节点及其所有子节点。有时这是很多很多的记录,比如 50,000 或更多。由于在自引用表上不允许级联删除,我们被迫从叶子开始逐个删除,然后沿着树的备份方式进行。我们经历了长达数小时的删除时间。
我们正在考虑使用“标记删除”技术,其中一个单独的程序将在非高峰时段清除标记为删除的节点,但我感兴趣的是数据库设计更改或其他一些 Oracle 构造是否可以在这里提供帮助。除了我在工作中学到的知识外,我没有接受过 Oracle 培训,而且创建数据库的人并没有考虑到这么大的数量。我对数据库设计更改持开放态度,因为它还不是一个固定的设计。