怎么将数据库中存的树转化为树形列表(数据库如何存储树形结构)

怎么将数据库中存的树转化为树形列表(数据库如何存储树形结构),第1张

先从数据结构的角度来答

题主应该知道B-树和B树最重要的一个区别就是B树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域

这就决定了B树更适合用来存储外部数据,也就是所谓的磁盘数据

从Mysql(Inoodb)的角度来看,B树是用来充当索引的,一般来说索引非常大,尤其是关系性数据库这种数据量大的索引能达到亿级别,所以为了减少内存的占用,索引也会被存储在磁盘上

那么Mysql如何衡量查询效率呢?磁盘IO次数,B-树(B类树)的特定就是每层节点数目非常多,层数很少,目的就是为了就少磁盘IO次数,当查询数据的时候,最好的情况就是很快找到目标索引,然后读取数据,使用B树就能很好的完成这个目的,但是B-树的每个节点都有data域(指针),这无疑增大了节点大小,说白了增加了磁盘IO次数(磁盘IO一次读出的数据量大小是固定的,单个数据变大,每次读出的就少,IO次数增多,一次IO多耗时啊!),而B树除了叶子节点其它节点并不存储数据,节点小,磁盘IO次数就少

这是优点之一

另一个优点是什么,B树所有的Data域在叶子节点,一般来说都会进行一个优化,就是将所有的叶子节点用指针串起来

这样遍历叶子节点就能获得全部数据,这样就能进行区间访问啦

至于MongoDB为什么使用B-树而不是B树,可以从它的设计角度来考虑,它并不是传统的关系性数据库,而是以Json格式作为存储的nosql,目的就是高性能,高可用,易扩展

首先它摆脱了关系模型,上面所述的优点2需求就没那么强烈了,其次Mysql由于使用B树,数据都在叶节点上,每次查询都需要访问到叶节点,而MongoDB使用B-树,所有节点都有Data域,只要找到指定索引就可以进行访问,无疑单次查询平均快于Mysql(但侧面来看Mysql至少平均查询耗时差不多)

总体来说,Mysql选用B树和MongoDB选用B-树还是以自己的需求来选择的

数据库类型可分为层次型、网状型和关系型。

层次型数据库是把数据根据层次构造(树结构)的方法呈现;网状型数据库是采用网状原理和方法,以网状数据模型为基础建立的数据库;关系型数据库是指采用了关系模型来组织数据的数据库。

数据库的作用

1、实现数据共享:数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。

2、减少数据的冗余度:同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。

3、保持数据的独立性:数据的独立性包括逻辑独立性(数据库中数据库的逻辑结构和应用程序相互独立)和物理独立性(数据物理结构的变化不影响数据的逻辑结构)。

4、数据实现集中控制:文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。

不知道你的数据库是什么,如果是oracle的话,你用start with connect by试试。我不太确定能不能直接出来你要的效果。如果出不来,那么用start with connect by+union all+条件判断(分别写每一个level=1的情况)应该可以,不过如果level=1有很多个,那么就麻烦了。

还有一种办法是利用字符串排序。比如1-1-1-2,1-2-1-2,1-1-1-3,那么排完序之后应该是1-1-1-2,1-1-1-3,1-2-1-2至于这个参数的出来方法就要去凑了。因为我担心还有例如1-1-1-2-1这样的,如果存在这样的,那么按照你的要求排序应该是

1-1-1-2,1-1-1-2-1,1-1-1-3,1-2-1-2,可是如果按照数字排序那么1-1-1-2-1肯定在最后,所以用字符排序可能才能达到你的要求。(还是用start with connect by)

比如这里最后的编码为

Level层数 父件代号 子件代号 子件顺序 编码

1 root C 1 1-1

1 root D 2 2-1

1 root F 3 3-1

2 C A 1 1-1-2-1

2 C B 2 1-1-2-2

2 D E 1 2-1-2-1

我这里没有环境,没办法测试,所有的内容均为猜想,仅供参考。

先根据父编码排序,父编码相同的情况下再根据子编码排序

SELECT id,name

FROM [Table1]

ORDER BY ISNULL(sjbm,0)+'',id

不确定你的sjbm是什么类型的,假如是int型的话,就要判断为NULL值的情况,对你给的数据分析,顶级数据的sjbm值可能是空的

产生的结果应该是

1 a

2 b 1

4 d 1

3 c 2

5 e 4

6 f 4

但是这样只能实现二级项排序,对于你现有的数据,应该是3级项,可以实现,但如果是N级项的话,就只能在存储过程里实现了

以下是3级项排序的实现方法,其中的排序值就是各项Id,以“”分隔:

--1级项,sjbm为空,排序值为(x)

SELECT id,name ,id orderId

FROM [Table1]

WHERE sjbm IS NULL

union all

--2级项,sjbm与1级项的id相等,排序值为(xy)

SELECT id,name ,[lv1]id + '' + [lv2]id

FROM [Table1] AS [lv2]

INNER JOIN

(

SELECT id

FROM [Table1]

WHERE sjbm IS NULL

) AS [lv1] ON [lv2]sjbm = [lv1]id

UNION ALL

--3级项,sjbm与2级项的id相等,排序值为(xyz)

SELECT id,name ,[lv2]sjbm + '' + [lv2]id + '' + [lv3]id

FROM [Table1] AS [lv3]

INNER JOIN

(

SELECT id,name,sjbm

FROM [Table1]

WHERE sjbm IN

(

SELECT id

FROM [Table1]

WHERE sjbm IS NULL

) AS [lv2] ON [lv3]sjbm=[lv2]id

ORDER BY orderId

如果显示OrderId的话,应该如下结果

1 a 1

2 b 12

3 c 123

4 d 14

5 e 145

6 f 146

下列软件不属于数据库管理系统的是(UNIX)。

UNIX

ORACLE

FOXPRO

SQLSERVER

DBS是采用了数据库技术的计算机系统。DBS是一个集合体,包含数据库、计算机硬件、软件和(数据库管理员)。

系统分析员

程序员

数据库管理员

*** 作员

对某个具体的数据库应用来说,下列说法中正确的是(以上三个都不是唯一的)。

E-R图是唯一的

数据模型是唯一的

数据库文件是唯一的

以上三个都不是唯一的

以下不属于数据库系统组成的是(文件系统)。

硬件系统

数据库管理系统及相关软件

数据库管理员(DBA)

文件系统

下列四项中说法不正确的是(数据库避免了一切数据的重复)。

数据库减少了数据冗余

数据库中的数据可以共享

数据库避免了一切数据的重复

数据库具有较高的数据独立性

与文件管理系统相比,(访问速度快)不是数据库系统的优点。

数据结构化(数据结构化是数据库与文件系统的根本区别。)

访问速度快(文件管理系统速度要比把文件内容放在数据库中快)

数据独立性

冗余度可控

下列四项中,不属于关系数据库特点的是(数据冗余小)。

数据冗余小

数据独立性高

数据共享性好

多用户访问

根据关系数据基于的数据模型-关系模型的特征判断下列正确的一项:(以二维表格结构来保存数据,在关系表中不允许有重复行存在)。

只存在一对多的实体关系,以图形方式来表示

以二维表格结构来保存数据,在关系表中不允许有重复行存在

能体现一对多、多对多的关系,但不能体现一对一的关系

关系模型数据库是数据库发展的最初阶段

用树型结构表示实体间联系的模型是(层次模型)。

关系模型

网状模型

层次模型

以上三个都是

(层次模型:用树型结构表示实体间联系的数据模型)

关系数据库用(二维表)来表示实体之间的联系。

树结构

网结构

二维表

线性表

(关系模型:使用最广泛的一种数据库模型。方法:用若干个二维表来表示实体以及实体之间的联系。)

以上就是关于怎么将数据库中存的树转化为树形列表(数据库如何存储树形结构)全部的内容,包括:怎么将数据库中存的树转化为树形列表(数据库如何存储树形结构)、数据库类型有哪几种、数据库树形结构数据的查询结果排序问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存