如何设计树状结构数据表

如何设计树状结构数据表,第1张

举个例子吧,我用的表结构是这样的,你可以参考下名称 类型约束条件 说明

type_id   int   无重复 类别标识,主键

type_name char(50)不允许为空 类型名称,不允许重复

type_father int 不允许为空 该类别的父类别标识,如果是顶节点的话设定为某个唯一值

type_layerchar(6) 限定3层,初始值为000000 类别的先序遍历,主要为减少检索数据库的次数按照这样的表结构,我们来看看上面例子记录在表中的数据是怎样的:type_id type_name type_father type_layer

1 总类别 0 000000

2 类别11 010000

3 类别1.1 2 010100

4 类别1.2 2 010200

5 类别21 020000

6 类别2.1 5 020100

7 类别31 030000

8 类别3.1 7 030100

9 类别3.2 7 030200

10类别1.1.13 010101

……现在按type_layer的大小来检索一下:SELECT * FROM Type_table_2 ORDER BY type_layer列出记录集如下:type_id type_name type_father type_layer

1 总类别 0 000000

2 类别11 010000

3 类别1.1 2 010100

10类别1.1.13 010101

4 类别1.2 2 010200

5 类别21 020000

6 类别2.1 5 020100

7 类别31 030000

8 类别3.1 7 030100

9 类别3.2 7 030200

……

就是表需要有一个主键,比如 ID

然后还有一个字段,叫 父编号, 比如 PID

再加上其他的字段,剩下的就是写 SQL 的事情了。

例如下面这个表,就是一个可以做树状的。

CREATE TABLE test_tree (

test_id INT,

pid INT,

test_val VARCHAR(10),

PRIMARY KEY (test_id)

)

如果采用父子节点的方式 效率上可能不高 但容易实现

也可以采用如下的方式

000

000000

000001

000002

000000001

这样三位表示一级 但是对每级的节点数有限制 查询也很容易

表示层次的可以快速方便的查询


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9984867.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存