mysql - 嵌套集层次结构中的多个表

标签 mysql tree hierarchical-data nested-sets adjacency-list

我有许多不同的项目存储在不同的 MySQL 表中,我想将它们放入树形层次结构中。使用邻接列表模型,我可以向每个表添加一个parent_id 字段,并使用外键关系链接这些表。

但是,我想使用嵌套集/修改的预序树遍历模型。数据将在严重偏向于读取的环境中使用,并且我希望运行的查询类型有利于这种方法。

问题是我拥有的关于嵌套集的所有信息都假设您只有一种类型的项目,存储在单个表中。我能想到的解决这个问题的方法是:

  • 树中具有多个外键字段,每个表/项目类型对应一个外键字段。
  • 在树形结构中存储项目表的名称以及项目 ID。

至少可以说,这两种方法都不优雅,那么有更好的方法吗?

最佳答案

RDBMS一开始就与存储层次结构不太匹配,并且您的用例使情况变得更糟。我认为使用 RDBMS 会得到对您自己的建议进行更精细调整但仍然丑陋的变体。恕我直言,其他数据模型将为您的问题提供更好的解决方案,例如图形数据库或文档数据库。文章Should you go Beyond Relational Databases?对此类内容进行了很好的介绍。

关于mysql - 嵌套集层次结构中的多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1088187/

相关文章:

mysql - 使用带有多个循环的 mysql 在 Node.js 中查询

php - 如何从 Symfony2 控制台命令使用主/从 doctrine2 配置

c - *** 检测到 glibc *** ./a.out : double free or corruption (top): 0x08901d70 *** while attempting to free a BST

javascript - 如何并行遍历目录树?

algorithm - 寻找最小化节点深度总和的生成树

php - 按最新评论排列帖子,并显示最新评论

mysql - 如何找到表中同一行的最大值?

sql - 获取分层表sql中每一行的级别

sql-server - 将此分层表非规范化为平面表的最快/最简单的方法是什么?

database-design - 如何防止对由相同类型的实体组成的实体进行深度递归查询? [里面很酷的例子]