高效目录树设计nosql,怎样建立目录树

怎样设计树形目录的数据库用SQL

首先你要确定你所使用的DBMS产品,因为在ORACLE和SQL SERVER等DBMS的SQL语法有局部的不同,但大体上语句是一样的。

公司主营业务:做网站、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出米林免费做网站回馈大家。

CREATE TALBE tmpDB (

tid int identity(1,1) primary key, --表主键,可以不用加not null一般使用了primary key就可默认为not null

tname varchar(100) not null, --节点名称

fatherID int --父节点ID

)

GO

生成树形数据结构

select

*

from

table

start with id = ?

connect by prior id = ?

C#WinForm中如何实现指定目录下指定时间段内的SQL数据内容的删除?

提供一个思路吧,删除指定条件的内容,必须在数据库中包含这些条件值。比如指定时间段内,数据库中设计到删除的表(或者通过关联表)中必须有时间字段,然后把界面获取的时间进行比较,在这个时间段内,就删除,不在就不删除。目录树是一样的道理,就是再增加一个条件而已。

idea怎么分享java文件

可用打包工具。

在初始窗口中单击ImportProject,在文件树中选择您的项目,打开Import窗口,选择Eclipseoption,然后单击Next。导入完成后,主窗口将打开,项目目录在左侧,编辑区域在右侧。下图显示了目录树结构。人们发现。已经生成了idea目录和web_test.iml文件,它们是idea的IDE依赖文件。

选择左边的下一个菜单,模块,这是idea的概念。模块包含在项目下。对了,很多人会对这个概念感到困惑甚至鄙视,但确实是正确的。它来自于maven的想法。如果你看过一些大型开源软件,你就会知道开源nosql的源代码。一个项目将被开发成许多模块。但是对于常规的javaweb,不用担心那么多,只要明白一个项目就是一个模块,两者可以合二为一。

如何设计目录树的数据库

字段名称 中文名称 数据类型

ID 编号 int

aDept_DeptID 部门代码 char

aDept_DeptName 部门名称 char

其中部门代码每两位(依照自己的情况定)为一级,如:A大学编码:00,B学院编码0001,B学院的C系:000101

还可以有其他一些辅助字段如:

aDept_Parent 是否父节点 char

可以在作一些判断时节省时间

B树和二叉排序树,B树和B+树的区别

一、B树的起源

B树,最早是由德国计算机科学家Rudolf Bayer等人于1972年在论文 《Organization and Maintenance of Large Ordered Indexes》提出的,不过我去看了看原文,发现作者也没有解释为什么就叫B-trees了,所以把B树的B,简单地解释为Balanced或者Binary都不是特别严谨,也许作者就是取其名字Bayer的首字母命名的也说不定啊……

二、B树长啥样

还是直接看图比较清楚,图中所示,B树事实上是一种平衡的多叉查找树,也就是说最多可以开m个叉(m=2),我们称之为m阶b树,为了体现本博客的良心之处,不同于其他地方都能看到2阶B树,这里特意画了一棵5阶B树 。

总的来说,m阶B树满足以下条件:

每个节点至多可以拥有m棵子树

根节点,只有至少有2个节点(要么极端情况,就是一棵树就一个根节点,单细胞生物,即是根,也是叶,也是树)

非根非叶的节点至少有的Ceil(m/2)个子树(Ceil表示向上取整,图中5阶B树,每个节点至少有3个子树,也就是至少有3个叉)

非叶节点中的信息包括[n,A0,K1,A1,K2,A2,…,Kn,An],,其中n表示该节点中保存的关键字个数,K为关键字且KiKi+1,A为指向子树根节点的指针

从根到叶子的每一条路径都有相同的长度,也就是说,叶子节在相同的层,并且这些节点不带信息,实际上这些节点就表示找不到指定的值,也就是指向这些节点的指针为空

B树的查询过程和二叉排序树比较类似,从根节点依次比较每个结点,因为每个节点中的关键字和左右子树都是有序的,所以只要比较节点中的关键字,或者沿着指针就能很快地找到指定的关键字,如果查找失败,则会返回叶子节点,即空指针

例如查询图中字母表中的K

从根节点P开始,K的位置在P之前,进入左侧指针

左子树中,依次比较C、F、J、M,发现K在J和M之间

沿着J和M之间的指针,继续访问子树,并依次进行比较,发现第一个关键字K即为指定查找的值

三、Plus版——B+树

作为B树的加强版,B+树与B树的差异在于:

有n棵子树的节点含有n个关键字(也有认为是n-1个关键字)

所有的叶子节点包含了全部的关键字,及指向含这些关键字记录的指针,且叶子节点本身根据关键字自小而大顺序连接

非叶子节点可以看成索引部分,节点中仅含有其子树(根节点)中的最大(或最小)关键字

请点击输入图片描述

B+树的查找过程,与B树类似,只不过查找时,如果在非叶子节点上的关键字等于给定值,并不终止,而是继续沿着指针直到叶子节点位置。因此在B+树,不管查找成功与否,每次查找都是走了一条从根到叶子节点的路径

如何用一段SQL语句递归找到一个目录下的所有子目录

有一个存储目录树的表,定义目录间的关系字段有两个:

如下:(ClassID表示该目录的编号,ClassParentID表示它的父目录的编号)

ClassID ClassParentID

1 1

2 1

3 2

4 3

5 3

表示的关系应该是

-1--(根目录)

|

-2--(第二级目录)

|

-3--(第三级目录)

|

-4--(第四级目录)

|

-5--(第四级目录)

这样的目录关系.

那么我通过知道一个目录的ClassID,如何通过一条SQL语句找到所有该目录的子目录?

如:

"SELECT * FROM 表 WHERE ClassParentID = "+ClassID+"and ClassParentID "+ClassID

但只能找到第一层的子目录,如何找到所有子目录,请大家给一条SQL语句实现!!

(因为事先不知道目录有多少层,当然一定是一条带有while循环的SQL语句)

1、

create table Test2

(

ClassID int,

ClassParentID int,

)

go

create proc Test2_proc

@nClassParentID int -- 要查询的父节点ID 号

as

begin

set nocount on

--

declare @nClassID int,

@nIndex int

-- create TempTable

create table #ClassIDTemp

(

nIndex int identity(1,1),

ClassID int,

ClassParentID int,

nFlag int default(0),

)

create index #ClassIDTemp_Index on #ClassIDTemp(nIndex)

-- insert First RecordSet

insert into #ClassIDTemp(ClassID,ClassParentID) select

ClassID,ClassParentID from Test2 where ClassParentID =

@nClassParentID order by ClassParentID

-- Circle

while(0=0)

begin

select top 1 @nIndex = nIndex, @nClassID = ClassID

from #ClassIDTemp where nFlag = 0 order by nIndex

asc

if @@rowcount = 0

break

else

begin

insert into #ClassIDTemp(ClassID,ClassParentID) select

ClassID,ClassParentID from Test2 where ClassParentID =

@nClassID order by ClassParentID

end

update #ClassIDTemp set nFlag = 1 where nIndex = @nIndex

end

-- Select Result

select ClassID,ClassParentID from #ClassIDTemp order by nIndex

if exists(select * from sysobjects where name = '#ClassIDTemp')

drop table #ClassIDTemp

end

go

2、

declare @Table table ( ClassID int primary key , ClassParentID int)

declare @Test table ( ClassID int primary key , ClassParentID int)

insert into @Table values ( 1, 0 ) -- 建议这里是 1,0 而不是 1, 1

insert into @Table values ( 2, 1 )

insert into @Table values ( 3, 2 )

insert into @Table values ( 4, 3 )

insert into @Table values ( 5, 3 )

insert into @Test select * from @Table where ClassID = 2

while exists ( select * from @Table A

inner join @Test B

on A.ClassParentID = B.ClassID

where A.ClassID not in ( select ClassID from @Test ) )

begin

insert into @Test

select A.* from @Table A

inner join @Test B

on A.ClassParentID = B.ClassID

where A.ClassID not in ( select ClassID from @Test )

end

select * from @Test

3、

sql1 = "(SELECT ClassID FROM 表 WHERE ClassParentID =" + 变量 + ")"

sql2 = "(SELECT ClassID FROM 表 WHERE (ClassParentID IN

"+ sql1 + ") OR (ClassID IN " + sql1 + "))"

sql = "SELECT * FROM 表 WHERE ClassParentID IN " + sql2 + " OR ClassID IN " + sql2

这个办法可实现1到4级的所有情况(包括只有2级、3级的情况)

4、--我的方法是用自定义函数实现,这样具有通用性

--测试

--测试数据

create table 表(ClassID int,ClassParentID int)

insert 表 select 1,0

union all select 2,1

union all select 3,2

union all select 4,3

union all select 5,3

go

--自定义函数,返回指定目录下的所有子目录列表

create function f_child(@ClassID int)

returns @re table(ClassID int,Level int)

as

begin

declare @l int

set @l=0

insert @re select @ClassID,@l

while @@rowcount0 --直接用@@rowcount判断

begin

set @l=@l+1

insert @re select a.ClassID,@l

from 表 a join @re b on a.ClassParentID=b.ClassID

where b.level=@l-1

end

return

end

go

--调用函数实现查询

select a.* from 表 a join dbo.f_child(1) b on a.ClassID=b.ClassID

go

--加上缩进效果

select ClassID=space(b.level*4)+cast(a.ClassID as varchar),a.ClassParentID

from 表 a join dbo.f_child(1) b on a.ClassID=b.ClassID

go

--删除测试环境

drop table 表

drop function f_child

/*--测试结果

ClassID ClassParentID

----------- -------------

1 0

2 1

3 2

4 3

5 3

(所影响的行数为 5 行)

ClassID ClassParentID

-------------- ----------------

10

2 1

3 2

4 3

5 3

(所影响的行数为 5 行)

--*/


当前文章:高效目录树设计nosql,怎样建立目录树
链接分享:http://azwzsj.com/article/phhode.html