前言
文件夹(分类)在数据库中的存储,最简单是这样设计字段:id,parentid,name。
id 就是文件夹自身的标识,parentid就是父文件夹的标识。这种方式有个缺点,如果想把某个文件夹以及其包含的子文件删除,那么要把所有子文件夹id找到,这个过程很繁琐,效率也低。
本文介绍一种多叉树来存储文件夹的方式。
多叉树方式存储
考虑使用多叉树来存储文件夹,树上的节点对应的就是一个文件夹。
树的定义:
l 规则1:根rootnode节点的left是1
l 规则2:某node的第一个子节点firstSubnode.left等于node.left+ 1
l 规则3:某node的right等于最后一个子节点lastSubnode.right + 1
l 规则4:叶节点(leaf node)的right=left +1
l 定律1:某个node的子节点数量为:(node.right – node.left - 1) / 2
l 定律2:某node的子节点范围:left>node.left && right<node.right
数据库字段设计:id,left,right,name。
例子
假设有以下结构文件夹:
R
|--- A
| |--- A1
| |--- A2
|
|--- B
|--- B1
那么字段对应:
id, left, right, name
1 1 12 R
2 2 7 A
3 3 4 A1
4 5 6 A2
5 8 11 B
6 9 10 B1
增删改操作自己根据规则和定律琢磨吧。效率没测试过。
后话
如果你有更好更成熟实用的方案,希望能一起分享,或者改进。