树结构在数据库表存储中通常如何表示?

BlueanGel 2005-08-09 11:51:31
树要求:
1. 子节点易于扩展,每个节点下所包含子节点树无法估计
2. 节点在10w个以内
3. 深度遍历为主要遍历手段,广度遍历辅助

这种表该怎么设计?
...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
sungangsg 2005-08-09
  • 打赏
  • 举报
回复
加一个父节点的字段,字段有编码规则,如0101的父结点为01,该方法适合深度遍历,可以无限扩展。
waterfirer 2005-08-09
  • 打赏
  • 举报
回复
对,那就要看你要往表里存什么了。
如果是物品,可以存物品编码
如果是类别,可以存类别编码
。。。。。。
除了父节点、子节点外,表里还有哪些字段,如何选择主键,跟你的系统设计和实际业务就有很大关系了
fkeiwgj 2005-08-09
  • 打赏
  • 举报
回复
可以把节点ID定为顺序数字:
1,2,3,4,5,6。。。。。
在oracle中有一个处理这种只要知道根节点就能顺序查询的语句start with.. connect by
liuyi8903 2005-08-09
  • 打赏
  • 举报
回复
这个。。。。。

就看你的实际业务了。

你拿点数据上来大家一起分析分析。
BlueanGel 2005-08-09
  • 打赏
  • 举报
回复
既然编码规则不适合这种情况,该用什么方式比较合适呢?
waterfirer 2005-08-09
  • 打赏
  • 举报
回复
因为深度遍历为主要遍历手段,因此不建议这样的编码规则,那样下去字段值就太长了。
而且有可能出现这样情况:原来是a-->b-->c-->d
将b-->c关系打断,加上d-->a关系
变为c-->d-->a-->b
此时,编码规则不起任何作用。

liuyi8903 2005-08-09
  • 打赏
  • 举报
回复
如:

子节点 父节点
01 0
001 01
00101 001
0010101 00101
可以设计成以上的数据结构。

查询时可以用

start with.. connect by

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧