如何在数据库中存储树形结构?

问题描述 投票:0回答:1

我想在mysql数据库中保存和恢复树形结构?

我尝试通过添加“parent_id”字段来引用父行的 id 来保存它。 父级,但它可以互相引用,这是不合逻辑的, 所以我想防止两行互相引用parent_id。

mysql tree
1个回答
0
投票

主题比所描述的问题有点兄弟,所以我将从这个开始,然后回答。 我知道在数据库中存储树的一些方法:

  • 父id引用+用于获取的with语句,
  • 持久路径 - 基本上 - 带有完整路径的附加列 - 例如:
    root_id:level_id:another_level_id:parent_id:node_id
  • min max - 整个树被编号 - 每个节点有 2 个附加列 - 子树中的最小数字,子树中的最大数字。进入第一个子节点 1 被添加到最小,并且当返回到该节点时也添加 1。我会寻找好的图片......无论如何 - 获取很容易 - 只需查询特定数字之间的所有节点即可获取整个子树。

所以问题是关于第一种情况,在这种情况下,我们有一个循环。请注意,只有一个节点引用其他节点很容易捕获,如果涉及 10 个节点怎么办?

答案可能是,对于任何触及parent_id列的更新,我们需要触发器来检查当前id是否未被任何节点用作父节点。换句话说 - 在获取根节点之前,检查当前 id 是否不在任何地方。

作为旁注 - 也许删除也应该以某种方式解决?我的意思是 - 也许我们需要修复结构,或者确保我们删除所有子项?

以上两者都可以通过应用程序完成,但由于问题是关于数据库的,所以我的建议坚持数据库。

© www.soinside.com 2019 - 2024. All rights reserved.