一种新型树状数据的编码方法技术

技术编号:36987960 阅读:12 留言:0更新日期:2023-03-25 18:05
本发明专利技术提供了一种新型树状数据的编码方法,涉及数据库技术领域,包括:设置树状数据的数据存储结构,包括字段:当前节点id、名称、节点层级、父节点id、编码和修改前的节点层级;设置树状数据中位于第一层级的节点的编码为固定编码0,层级为1;从第二层级开始,节点的层级=父节点层级+1,编码包括相拼接的编码前缀和临时编码,编码前缀为父节点编码,临时编码为从0001开始生成的一个四位数;若拼接编码前缀和临时编码得到的编码不存在于现有编码列表中,则可作为该节点的编码;将该节点的编码存入该节点的编码字段。本发明专利技术可动态生成树状数据中节点的编码,在修改当前节点的父节点时,可动态调整当前节点和级联子节点的编码和层级。级。级。

【技术实现步骤摘要】
一种新型树状数据的编码方法


[0001]本专利技术属于计算机应用
,尤其是涉及一种新型树状数据的编码方法。

技术介绍

[0002]数据库设计树状结构时,都是通过节点记录直接父节点的方法,最终形成树状数据结构。基于这种树状数据结构,在数据库的各项操作过程中,都存在会比较麻烦而且效率非常低的情况。如:要检索或统计某一节点下的所有子节点,有以下几种方法:第一种方法:先通过 parent_id 查询出所有子节点,然后依次查询子节点下所有下级节点。依次循环。
[0003]第二种方法是:通过定义存储过程,利用游标的下移查找所有节点。
[0004]第三种方法是:在标准的树形数据结构表的基础上增加一个 path 字段,该 path 字段记录每个节点的路径。当执行数据查询时,根据所要查询的节点的 path 字段来匹配节点,查到该节点下所有节点。参见CN103853773A

一种Mysql数据库下树形数据结构的检索方法。
[0005]第四种方法是:在标准的树形数据结构表的基础上增加一个parents_ids字段,存储包括所有父节点的信息,每一父节点的信息通过特殊字符区分。参见CN104063413A

一种Mysql数据库树状结构及其快速检索方法。
[0006]以上几种做法均有缺陷,第 1 种方法不能够一次性取出目标数据,需要多次访问数据库,效率极低;第 2 种方法可读性差、难以维护、可移植能力差。第3种和第4种方法大大提高了检索效率,但是没有解决树形结构数据调整父节点后,其级联子节点的path和parents_ids的变化问题,并且由此问题还会影响级联查询和统计结果的正确性。

技术实现思路

[0007]针对上述问题,本专利技术提出了一种新型树状数据的编码方法,便于在对数据库进行节点新增、父节点修改、节点删除、子节点的查询和统计等操作时,提高数据库的操作效率。
[0008]为实现上述目的,本专利技术公开了一种新型树状数据的编码方法,包括:设置树状数据的数据存储结构,包括字段:当前节点id、名称、节点层级、父节点id、编码和修改前的节点层级;设置树状数据中位于第一层级的节点的所述编码为固定编码0,所述层级为1;树状数据中,从第二层级开始,节点的层级=父节点层级+1,所述编码包括相拼接的编码前缀和临时编码,所述编码前缀为父节点编码,所述临时编码为从0001开始生成的一个四位数;若拼接编码前缀和临时编码得到的编码不存在于现有编码列表中,则可作为该节点的编码;将该节点的编码存入该节点的编码字段。
[0009]作为本专利技术的进一步改进,若拼接编码前缀和临时编码得到的编码存在于现有编码列表中,则将所述临时编码递增加1,得到新的临时编码;拼接编码前缀和新的临时编码,再次判断是否存在于现有编码列表中,直至得到一个现有编码列表中不存在的编码,作为该节点的编码。
[0010]作为本专利技术的进一步改进,树状数据中新增节点时,新增节点的编码和层级生成过程包括:查询已有的编码列表;在所述编码列表中根据新增节点的父节点id查询父节点的编码和层级;从0001开始生成一个四位数作为临时编码,拼接父节点的编码和临时编码得到完整编码;判断该完整编码是否存在于现有编码列表中,若不存在,则将该完整编码作为该新增节点的编码;若存在,则循环执行将临时编码递增加1、与父节点编码拼接得到完整编码、判断完整编码是否存在于现有编码列表,直至拼接得到的完整编码不存在于现有编码列表中,将得到的完整编码作为该新增节点的编码;将父节点的层级加1得到该新增节点的层级。
[0011]作为本专利技术的进一步改进,在树状数据中对节点的父节点进行修改时,节点的编码和层级修改包括步骤:查询已有的编码列表;根据节点修改后的父节点id查询该父节点的编码和层级;从0001开始生成一个四位数作为临时编码,拼接该父节点的编码和临时编码得到完整编码;判断该完整编码是否存在于现有编码列表中,若不存在,则将该完整编码作为该节点的编码;若存在,则循环执行将临时编码递增加1、与父节点编码拼接得到完整编码、判断完整编码是否存在于现有编码列表,直至拼接得到的完整编码不存在于现有编码列表中,将得到的完整编码作为该新增节点的编码;将节点原来的层级赋予所述修改前的节点层级这一字段;将父节点的层级加1得到节点现在的层级。
[0012]作为本专利技术的进一步改进,在树状数据中对节点的父节点进行修改后,还需修改节点的所有级联子节点的层级,包括步骤:设置d_value=修改前的节点层级

层级;计算节点的d_value值,若d_value=0,则节点在父节点修改前后的层级一致,节点的所有级联子节点的层级无需修改;若d_value
¹
0,则节点在父节点修改前后的层级发生变化,对节点的所有级联子节点的层级均需进行修改,包括将各级联子节点原来的层级赋予所述修改前的节点层级这一字段,各级联子节点的层级=修改前的节点层级

d_value。
[0013]作为本专利技术的进一步改进,在树状数据中对节点的父节点进行修改后,还需修改节点的所有级联子节点的编码,包括步骤:
根据修改父节点前节点的编码作为前缀获取节点的所有级联子节点,形成级联子节点列表;将修改父节点后得到的节点的编码作为新前缀;根据节点的所述修改前的节点层级计算级联子节点的编码需截掉的位数;遍历所述级联子节点列表,根据需截掉的位数对各级联子节点由级联子节点的编码前端对编码进行截断;将级联子节点的编码阶段后的剩余部分与所述新前缀进行拼接,得到级联子节点的新的编码。
[0014]作为本专利技术的进一步改进,根据节点的所述修改前的节点层级计算级联子节点的编码需截掉的位数,包括:节点的所述修改前的节点层级为n,则级联子节点的编码需截掉的位数计算公式为:x=1+(n

1)*4;其中,1表示第一层级的固定编码0所占的位数;n

1表示去除第一层级外的剩余层级数;4表示去除第一层级外每层级增加的编码位数。
[0015]作为本专利技术的进一步改进,在树状数据中删除任一节点时,还需删除该节点的所有级联子节点,包括步骤:在已有编码列表中以该节点的编码为前缀查询该节点的所有级联子节点,形成级联子节点的id列表;遍历级联子节点的id列表,逐个删除该节点的级联子节点。
[0016]作为本专利技术的进一步改进,可通过节点的编码查询节点的所有级联子节点和指定层级的级联子节点;查询节点的所有级联子节点,包括:在已有编码列表中,以该节点的编码为前缀查询该节点的所有级联子节点,形成所有级联子节点数据列表;查询节点的指定层级的级联子节点,包括:在已有编码列表中,查询以该节点的编码为前缀且层级等于指定层级的级联子节点,形成指定层级级联子节点数据列表。
[0017]作为本专利技术的进一步改进,可通过节点的编码统计节点的所有级联子节点的数量及指定层级的级联子节点的数量,包括:统计节点的所有级联子节点的数量,包括:在已有编码列表中,以该节点的编码为前本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种新型树状数据的编码方法,其特征在于,包括:设置树状数据的数据存储结构,包括字段:当前节点id、名称、节点层级、父节点id、编码和修改前的节点层级;设置树状数据中位于第一层级的节点的所述编码为固定编码0,所述层级为1;树状数据中,从第二层级开始,节点的层级=父节点层级+1,所述编码包括相拼接的编码前缀和临时编码,所述编码前缀为父节点编码,所述临时编码为从0001开始生成的一个四位数;若拼接编码前缀和临时编码得到的编码不存在于现有编码列表中,则可作为该节点的编码;将该节点的编码存入该节点的编码字段。2.根据权利要求1所述的新型树状数据的编码方法,其特征在于:若拼接编码前缀和临时编码得到的编码存在于现有编码列表中,则将所述临时编码递增加1,得到新的临时编码;拼接编码前缀和新的临时编码,再次判断是否存在于现有编码列表中,直至得到一个现有编码列表中不存在的编码,作为该节点的编码。3.根据权利要求1所述的新型树状数据的编码方法,其特征在于:树状数据中新增节点时,新增节点的编码和层级生成过程包括:查询已有的编码列表;在所述编码列表中根据新增节点的父节点id查询父节点的编码和层级;从0001开始生成一个四位数作为临时编码,拼接父节点的编码和临时编码得到完整编码;判断该完整编码是否存在于现有编码列表中,若不存在,则将该完整编码作为该新增节点的编码;若存在,则循环执行将临时编码递增加1、与父节点编码拼接得到完整编码、判断完整编码是否存在于现有编码列表,直至拼接得到的完整编码不存在于现有编码列表中,将得到的完整编码作为该新增节点的编码;将父节点的层级加1得到该新增节点的层级。4.根据权利要求1所述的新型树状数据的编码方法,其特征在于:在树状数据中对节点的父节点进行修改时,节点的编码和层级修改包括步骤:查询已有的编码列表;根据节点修改后的父节点id查询该父节点的编码和层级;从0001开始生成一个四位数作为临时编码,拼接该父节点的编码和临时编码得到完整编码;判断该完整编码是否存在于现有编码列表中,若不存在,则将该完整编码作为该节点的编码;若存在,则循环执行将临时编码递增加1、与父节点编码拼接得到完整编码、判断完整编码是否存在于现有编码列表,直至拼接得到的完整编码不存在于现有编码列表中,将得到的完整编码作为该新增节点的编码;将节点原来的层级赋予所述修改前的节点层级这一字段;
将父节点的层级加1得到节点现在的层级。5.根据权利要求4所述的新型树状数据的编码方法,其特征在于:在树状数据中对节点的父节点进行修改后,还需修改节点的所有级联子节点的层级,包括步骤:设置d_value=修改前的节点层级

层级;计算节点的d_value值,若d_value=0,则节点在父节点修改前后的层级一致,...

【专利技术属性】
技术研发人员:张世昌刘伟珊刘宏亮李铭
申请(专利权)人:山东可信云信息技术研究院
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1