逻辑问题

逻辑问题

https://class.imooc.com/course/qadetail/346946


我觉得课程的编码方式对当前情形没什么问题,即使有多个模块组也不成问题。

而且必须按node_code排序,就算按照父子节点进行处理,判断父节点id值,也必须按node_code排序吧?唯一小缺点是node_code前三位100,后四位000x, 模块组如果超过10个,位数会溢出,或者100是第1组,101是第2组,也不怎么好看


关键问题是课程设计太理想化了,如果一级模块组没有子项,那么一级节点的Map的children就是空的,如果有3级子项,有的2级又没有3级,有的2级有3级,这些判断才比较麻烦,即使按父子关系处理也不好处理,示例如下:

https://img1.sycdn.imooc.com/climg/66265446095e68e605990359.jpg

这个parent_id也只适用于2层深度,按parent_id去判断,还不如您课程按node_type判断更快,而且前提是要按node_code排序的,循环判断为空,则加List加children,不空再append给children,如上图所示。


node_type是树的深度,parent_id其实是根据node_code的第1位来写的,

我想请教的是,如果存在3级节点,按目前表的结构根本撑不住,有没有什么好的方案?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,同学的理解是正确的。

1.课程中的数据库设计本身是有一点问题的,实际开发的时候并不会这么处理。这里只是为了演示一种特殊情况的处理方式,即在数据库设计时没有按照层级进行设计,而是后期通过主键进行处理。实际上,多数情况下数据库会在设计时考虑到这点,会在字段上加上例如父节点id这样的字段来进行处理。

2.上一条中父节点的案例在学习MySql的时候处理过,只不过当时只关注sql语句而不是业务逻辑,例如工资值和工资等级。

如果这里也是按照父子节点进行处理,就不需要使用这种方式了,可以通过表关联查询,然后在代码中判断父节点id值,然后生成集合就可以了。当生成集合后,前端根据集合中内容,就可以展示任何模块及其子节点了。

祝学习愉快~

  • 坨坨儿 提问者 #1

    您都没看我提的问题,照抄别人问题的答案,这个行为有点过了...

    2024-04-23 10:09:23
  • 好帮手慕小蓝 回复 提问者 坨坨儿 #2

    同学你好,这段课程的数据库设计确实是存在问题的,如同学所说,过于理想化了。并且实际开发中解决这个问题的方式就是上面回答中的通过字段来进行关联。并且加了字段之后,无论多少级的节点,都是可以正常支撑的。

    上面的回答虽然老师之前确实使用过,但是确实是关于这部分数据库表最详实的回答了。

    所以最终,能够解决同学疑问的方式,就是加字段,然后表关联查询。

    祝学习愉快~

    2024-04-23 10:27:11
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java工程师 2024版
  • 参与学习       2024    人
  • 提交作业       1318    份
  • 解答问题       1228    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师