文件夹(分类)数据库存储设计

前言

文件夹(分类)在数据库中的存储,最简单是这样设计字段:id,parentid,name。

id 就是文件夹自身的标识,parentid就是父文件夹的标识。这种方式有个缺点,如果想把某个文件夹以及其包含的子文件删除,那么要把所有子文件夹id找到,这个过程很繁琐,效率也低。

本文介绍一种多叉树来存储文件夹的方式。

 

多叉树方式存储

考虑使用多叉树来存储文件夹,树上的节点对应的就是一个文件夹。

树的定义:

l 规则1:根rootnode节点的left1

l 规则2:某node的第一个子节点firstSubnode.left等于node.left+ 1

l 规则3:某noderight等于最后一个子节点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

 

增删改操作自己根据规则和定律琢磨吧。效率没测试过。 

后话

如果你有更好更成熟实用的方案,希望能一起分享,或者改进。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值