反模式

作者: LJasperliet | 来源:发表于2019-11-05 15:43 被阅读0次

树结构

网站的回复评论,这是一种典型的树形结构,拥有层级关系

create table comments{
     comment_id,
      parent_id,
      comment,
      forenign key(parent_id) references comments(comment_id)
}

这是一种常见的设计模式,添加parent_id 来表示层级关系。
这种方式很容易查询一个节点的直接后代,但是没有办法查询这个节点下的所有后代。
查询直接后代

select c1.*,c2.* from comments c1 left join comments c2 on c2.parent_id = c1.comments_id;

如果要查询多层节点 需要扩展一个联结

select c1.* ,c2.*,c3.*,c4.*
from comments c1                                             ---- 第一层
left join comments c2   
      on c2.parent_id = c1.comment_id               ---- 第二层
left join comments c3
      on c3.parent_id = c2.comment_id               -----第三层
left join comments c4
      on c4.parent_id = c3.comment_id;              -----第四层

sql查询联结次数是有上限,上面只能查询4层,无法查询跟多,层次太多,执行聚合函数比如count ()也非常困难。

解决方案

1:路径枚举

    comment_id,
     path,
     comment,
    }

comment_id path comment
1 1/
2 1/2/ 不错
3 1/2/3 奶茶
4 1/4 naice

如果我们要查询节点7的祖父

select * from comments as c
where '1/4/6/7' like c.path || '%'

|| 是字符串连接符
匹配路径为 1/4/6/% 1/4/% 1/%

将查询路径反过来 获取节点的所有后代
缺点:数据库自身无法保证路径格式总是正确的以及路径中的节点确实存在,需要依赖应用程序逻辑代码维护。长度存在限制。

表设计的时候可以综合考虑使用 邻接表 parent_id和路径 path(1/2/7/)

相关文章

  • 反模式

    树结构 网站的回复评论,这是一种典型的树形结构,拥有层级关系 这是一种常见的设计模式,添加parent_id 来表...

  • 反模式

    反模式(英文:Anti-patterns或pitfalls), 是指用来解决问题的带有共同性的不良方法。它们已经经...

  • ELSE 技术周刊(2017.10.02期)

    本期推荐 ES6 Promise:模式与反模式 这是一篇有用的关于常见 Promise 模式和反模式的文章。 业界...

  • 程序员的那些反模式

    有鸡汤就有反鸡汤,有模式就有反模式。 今天,我们来谈一谈程序员的行为中的那些反模式,涉及程序员的日常工作和学习的各...

  • 反依赖模式

    第五节作业: 1、今天这节课,触动你最深的是哪句话? 今天感受最深的是老师说的反依赖模式的特点,这就是我在亲蜜关...

  • DevOps反模式

    要在团队中推动DevOps实践落地,一个良好的DevOps服务层必不可少。本文总结了构建DevOps服务层需要关注...

  • ant select组件,多选反显

    mutiple模式下,多选,反显时

  • Python 设计模式——反模式

    软件设计模式提供了一套规则或标准,能够帮助开发人员在设计层面进行决策。不良的设计主要表现在四个方面: 不动性:开发...

  • 2019.09.26亲子游戏

    培养孩子举一反三的能力--模式。 重复模式:abab,aabbccaabbcc 循环模式:潮起~潮落,日出~日落,...

  • Android架构组件

    ViewModel和LiveData-模式与反模式 改造 Android 官方架构组件 ViewModel 使用A...

网友评论

      本文标题:反模式

      本文链接:https://www.haomeiwen.com/subject/vwssbctx.html