栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

有效而轻松地实现等级制,父母/子女关系

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

有效而轻松地实现等级制,父母/子女关系

不幸的是,如果您无法更改数据模型,并且使用的是MySQL,则将陷入需要递归查询并且使用不支持递归查询的DBMS的局面。

Quassnoi写了一系列有趣的博客文章,展示了查询分层数据的技术。他的解决方案非常聪明,但是非常复杂。
http://explainextended.com/2009/03/17/hierarchical-queries-in-
mysql/

PostgreSQL是另一个开源RDBMS,它确实支持递归查询,因此您可以按照显示的方式获取整棵树。但是,如果您不能更改数据模型,则假定您无法切换到其他RDBMS。

有几种可供选择的数据模型,它们使得获取任意深的树变得更加容易:

  • 封闭表
  • 嵌套集又称为修改后的预序树遍历
  • 路径枚举又称实体化路径

我将在我的演示文稿“ 使用SQL和PHP的层次数据模型”中以及在《SQL反模式:避免数据库编程的陷阱》一书中介绍这些内容。

最后,在Slashdot的代码中,我看到了另一个解决方案,用于它们的注释层次结构:它们像在“邻接表”中一样存储“
parent_id”,但它们还存储“
root_id”列。给定树的每个成员具有相同的root_id值,root_id是其树中的最高祖先节点。然后,很容易在一个查询中获取整棵树:

SELECt * FROM site WHERe root_id = 123;

然后,您的应用程序将所有节点从数据库中取回一个数组,并且您必须编写代码以遍历该数组,将节点插入内存中的树数据结构中。如果您有许多单独的树,并且每棵树都有相对较少的条目,那么这是一个很好的解决方案。这对Slashdot的案子很有好处。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号