我是靠谱客的博主 高兴心锁,最近开发中收集的这篇文章主要介绍树状结构的数据表如何设计?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

如果你的树深度是可预期的话,有个超简单的数据结构。你需要3个字段来表达这个树:

  1. id,本节点的primary key
  2. parent_id,其值为父节点的primary key
  3. key,忘了学名叫啥了,你可以称为线索
  4. level,表示当前节点到根节点的距离

其中,key字段的值为:从跟节点到父节点的primary key,中间用任意非数字符号分割。

例如以下树状结构

├── a
│   ├── d
│   │   ├── p
│   │   ├── q
│   │   └── r
│   ├── e
│   └── f
├── b
│   ├── x
│   ├── y
│   └── z
├── c

对应的数据库表值为:

| id | value | parent_id | key
| level |
| 1
| a
| 0
| "-"
| 1
|
| 2
| b
| 0
| "-"
| 1
|
| 3
| c
| 0
| "-"
| 2
|
| 4
| d
| 1
| "1-"
| 2
|
| 5
| e
| 1
| "1-"
| 2
|
| 6
| f
| 1
| "1-"
| 2
|
| 7
| x
| 2
| "2-"
| 2
|
| 8
| y
| 2
| "2-"
| 2
|
| 9
| z
| 2
| "2-"
| 2
|
| 10 | p
| 4
| "1-4-" | 3
|
| 11 | q
| 4
| "1-4-" | 3
|
| 12 | r
| 4
| "1-4-" | 3
|

于是,在给定一个节点d的时候,

  1. 查找d的所有子孙节点:select * from table_name where key like "${d.key}-${d.id}-%"
  2. 查找某个节点的所有子节点:select * from table_name where key like "${d.key}-${d.id}-%" and level=${d.level}+1

这个设计,结构非常简单。key和level是辅助字段,维护这两个字段成本很低,即使全部重建要比MPT简单多了。

最后

以上就是高兴心锁为你收集整理的树状结构的数据表如何设计?的全部内容,希望文章能够帮你解决树状结构的数据表如何设计?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部