`

树型结构数据在数据库基本表中的存储及维护

 
阅读更多

相关讨论连接:
早就想简单说说: 关于树型结构数据的存储及维护http://expert.csdn.net/Expert/TopicView1.asp?id=1677669

树型结构数据的存储采用:
Tree(ID,ParentID,Remark)
如果仅对于存储来讲,无疑是最经济!
但是利用这样的结构,来提供一些基于稍微复杂点的查询的应用表现形式
效率应该说相当低下!
如: 查询某节点的路径等!
如要高效的查询,我们可以在维护数据时下点功夫!
我们以一个树型结构论坛的实现为例:

Tree(ID,ParentID,RootID,OrderID,MaxID,Indent,Title,Content,Remark)
ID: Integer 帖子ID
ParentID: Integer 父贴ID
RootID: Integer 根帖ID
OrderID: Integer 同一个根帖中,帖子顺序ID
MaxID: Integer 用于使新贴在顶部
Indent: Integer 缩进量
Title: Varchar 帖子标题
Content: Varchar 帖子内容
Remark: Varchar 除 ID,ParentID 外的贴子线索

这样的设计只要维护好每一个字段都为查询显示提高了效率!
请看下面的维护程序:
--==========================================
alter procedure AppSP_AddNew
@ID integer
,@Title varchar(8000) =null
,@Content varchar(8000)=null
as
--declare @id int
--set @id=0
if @ID=0
begin
insert into Tree (ParentID,OrderID,Indent,Title,Content)
values (0,0,0,@Title,@Content)
--把帖子顶到上面:
update Tree
set RootID = ID
,MaxId = (select max(id) from Tree)
where RootID is null
end
else
begin
--调整同一个"根帖"中,帖子的内部顺序:
update Tree
set OrderID = OrderID + 1
where RootID = (select rootid
from tree
where ID = @id)
and OrderID > (select OrderID
from Tree
where ID = @id
)
--插入回复的帖子,同时维护 RootID,ParentID,OrderID,Indent,remark,Title,Content
insert into Tree (RootID,ParentID,OrderID,Indent,remark,Title,Content)
select RootID,@ID,OrderID+1,Indent + 1
,case when remark is null then cast(parentid as varchar)
else remark + '-' + cast(parentid as varchar)
end
,isnull(@Title,'Re: ' + Title),@Content
from Tree
where id=@id
--把帖子顶到上面:
update Tree
set maxid = (select max(id)
from Tree
)
where rootid = (select rootid
from tree
where id=@id
)
end
--========================================

该程序用于
1.增加新贴:
AppSP_AddNew 0,'第一个问题','地球是圆的吗?'
2.回复帖子:
AppSP_AddNew 1,'Re: 第一个问题','地球是圆的!'

这样,只需简单查询:
select *, remark + '-' + cast(parentid as varchar) + '-' + cast(id as varchar) , space(indent) + '['
from tree
order by MaxID desc,orderid
就可高效的实现帖子列表及其线索,级别等!
虽然维护时增加了一些工作量!

--相关DDL脚本:
CREATE TABLE [Tree] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ParentID] [int] NULL ,
[RootID] [int] NULL ,
[OrderID] [int] NULL ,
[MaxID] [int] NULL ,
[Indent] [int] NULL ,
[Title] [varchar] (50),
[Content] [varchar] (200) ,
[Remark] [varchar] (250) ,
CONSTRAINT [PK_Tree] PRIMARY KEY CLUSTERED
(
[ID]

相关讨论连接:
早就想简单说说: 关于树型结构数据的存储及维护http://expert.csdn.net/Expert/TopicView1.asp?id=1677669

树型结构数据的存储采用:
Tree(ID,ParentID,Remark)
如果仅对于存储来讲,无疑是最经济!
但是利用这样的结构,来提供一些基于稍微复杂点的查询的应用表现形式
效率应该说相当低下!
如: 查询某节点的路径等!
如要高效的查询,我们可以在维护数据时下点功夫!
我们以一个树型结构论坛的实现为例:

Tree(ID,ParentID,RootID,OrderID,MaxID,Indent,Title,Content,Remark)
ID: Integer 帖子ID
ParentID: Integer 父贴ID
RootID: Integer 根帖ID
OrderID: Integer 同一个根帖中,帖子顺序ID
MaxID: Integer 用于使新贴在顶部
Indent: Integer 缩进量
Title: Varchar 帖子标题
Content: Varchar 帖子内容
Remark: Varchar 除 ID,ParentID 外的贴子线索

这样的设计只要维护好每一个字段都为查询显示提高了效率!
请看下面的维护程序:
--==========================================
alter procedure AppSP_AddNew
@ID integer
,@Title varchar(8000) =null
,@Content varchar(8000)=null
as
--declare @id int
--set @id=0
if @ID=0
begin
insert into Tree (ParentID,OrderID,Indent,Title,Content)
values (0,0,0,@Title,@Content)
--把帖子顶到上面:
update Tree
set RootID = ID
,MaxId = (select max(id) from Tree)
where RootID is null
end
else
begin
--调整同一个"根帖"中,帖子的内部顺序:
update Tree
set OrderID = OrderID + 1
where RootID = (select rootid
from tree
where ID = @id)
and OrderID > (select OrderID
from Tree
where ID = @id
)
--插入回复的帖子,同时维护 RootID,ParentID,OrderID,Indent,remark,Title,Content
insert into Tree (RootID,ParentID,OrderID,Indent,remark,Title,Content)
select RootID,@ID,OrderID+1,Indent + 1
,case when remark is null then cast(parentid as varchar)
else remark + '-' + cast(parentid as varchar)
end
,isnull(@Title,'Re: ' + Title),@Content
from Tree
where id=@id
--把帖子顶到上面:
update Tree
set maxid = (select max(id)
from Tree
)
where rootid = (select rootid
from tree
where id=@id
)
end
--========================================

该程序用于
1.增加新贴:
AppSP_AddNew 0,'第一个问题','地球是圆的吗?'
2.回复帖子:
AppSP_AddNew 1,'Re: 第一个问题','地球是圆的!'

这样,只需简单查询:
select *, remark + '-' + cast(parentid as varchar) + '-' + cast(id as varchar) , space(indent) + '['
from tree
order by MaxID desc,orderid
就可高效的实现帖子列表及其线索,级别等!
虽然维护时增加了一些工作量!

--相关DDL脚本:
CREATE TABLE [Tree] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[ParentID] [int] NULL ,
[RootID] [int] NULL ,
[OrderID] [int] NULL ,
[MaxID] [int] NULL ,
[Indent] [int] NULL ,
[Title] [varchar] (50),
[Content] [varchar] (200) ,
[Remark] [varchar] (250) ,
CONSTRAINT [PK_Tree] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]


) ON [PRIMARY]
) ON [PRIMARY]
分享到:
评论

相关推荐

    java递归树型结构通用数据库

    在Java递归树型结构通用数据库中,使用关系型数据库来存储部门信息,数据库表结构设计包括部门表、用户表、部门用户表等,通过这些表之间的关系实现树型结构的部门管理。 6. 递归算法实现 在Java递归树型结构通用...

    Delphi中数据库关联树型结构生成与同步数据维护.zip_数据同步_数据库关联_数据维护_树型结构生成

    在Delphi编程环境中,数据库关联树型结构的生成与同步数据维护是开发高效数据库应用程序的重要环节。本资料主要探讨了如何在Windows XP操作系统下,利用Delphi 7进行相关操作。 首先,我们要理解数据库关联的概念。...

    使用冗余数据设计树型关系的数据结构.pdf

    树型关系数据结构是一种常见的数据组织形式,尤其是在层次数据库中,它能够有效地表达层次关系。 接下来,我们将详细探讨使用冗余数据设计树型关系数据结构时需要注意的几个关键知识点: 1. 树型数据结构的定义和...

    基于JDOM的XML技术用于“树型”数据结构的研究.pdf

    1. 树型数据结构在传统数据库系统中的局限性:在关系数据库中,如果要存储类似树型的数据结构,将需要创建多个二维表来代表各个节点之间的关系,这会导致系统维护复杂度上升,查询效率降低,且在修改如名称等字段时...

    ajax+asp无限级分类树型结构的代码

    在Web开发中,构建无限级分类树型结构是一项常见的需求,特别是在内容管理系统或者电子商务网站中,用于管理产品分类或文章分类。Ajax(Asynchronous JavaScript and XML)与ASP(Active Server Pages)结合可以实现...

    填充数据库到树型框(模块+例程).rar

    "填充数据库到树型框(模块+例程)"这个主题就涉及到如何将数据库的数据有效地组织并显示在树形结构中,这在Windows应用开发,特别是桌面应用中非常常见。下面我们将详细探讨这一过程涉及的关键知识点。 首先,...

    算法与数据结构 (ppt

    例如,电话号码查询系统使用线性结构来存储数据,而磁盘目录文件系统则使用树型结构来组织数据,交通网络图则通常采用网状结构来表示多个地点之间的路径关系。 该PPT文档不仅介绍了数据结构的基本概念和术语,还...

    电子病历的数据结构和存储.pdf

    而数据结构是研究数据元素之间的逻辑关系及其在计算机内部的存储表示,它包括线性结构、树型结构、图状结构等多种。 线性结构是最基础的数据结构之一,其特点是一个数据元素对应另一个数据元素,数据元素间存在一对...

    数据库填充到树型框例程.e.rar

    数据库填充到树型框是一种常见的数据可视化技术,尤其在开发用户界面时,它能帮助用户以层次结构的方式浏览和操作数据。在这个例子中,“数据库填充到树型框例程.e.rar”很可能包含了一个示例程序或者代码片段,用于...

    树型DW代码.

    在描述中提到的"树型DW"可能是指在设计数据仓库时,采用树形结构来组织和存储数据,这种结构有助于更好地理解和分析复杂的关系数据。 树型数据结构是计算机科学中常用的数据结构之一,它由节点(包含数据)和边...

    php树型结构留言板的设计与实现毕业论文.docx

    在设计和实现树型结构留言板之前,需要对留言板系统进行分析。留言板系统分析主要涉及到两个方面:可行性分析和系统需求分析。 可行性分析 可行性分析是指对留言板系统的技术可行性、经济可行性和操作可行性的分析...

    电子病历的数据结构和存储 (1).pdf

    同时,文章还比较和分析了基于XML树型结构的电子病历在关系型数据库和原生XML数据库中的存储。XML(eXtensible Markup Language,可扩展标记语言)因其良好的数据表示和存储能力,在电子病历存储方案中得到了广泛...

    数据结构 计算机系专用 考研[PPT]

    数据结构的物理结构,即存储结构,包括顺序存储、链式存储、索引存储等,决定了数据在内存中的布局和访问方式。 在数据结构课程中,还会涉及抽象数据类型(ADT)的概念,它定义了一组操作和这些操作的行为,但不涉及...

    完整版填充数据库到树型框(模块+例程).rar

    "完整版填充数据库到树型框(模块+例程)"这个项目显然关注的是如何将数据库中的数据有效地展示在用户界面的树形控件中,以便用户可以清晰、方便地浏览和操作。这涉及到几个关键的技术点: 1. 数据库交互:首先,...

    数据结构经典PPT下载

    数据结构是计算机科学中至关重要的一个分支,它探讨如何有效地组织和存储数据,以便于算法的高效执行。《数据结构 (C 语言版)》是由严蔚敏和吴伟民编著,清华大学出版社出版的经典教材,是学习数据结构的基础资料。...

    数据结构严版教材ppt

    例如,在电话号码查询系统中,数据结构可能是二维数组、表结构或向量,不同的结构会影响查询算法的效率。数据结构不仅要考虑数据元素本身,还需要定义针对这些结构的操作。在电话簿的例子中,数据结构设计包括如何...

    数据结构-清华大学严蔚敏1

    在实际工程中,数据结构的选择和设计直接影响到程序的性能和可维护性。因此,无论是开发操作系统、编译器、数据库系统,还是编写大型应用程序,都需要深入理解和熟练运用数据结构。通过学习严蔚敏教授的教材,结合...

    《数据结构》 严蔚敏版讲义

    总的来说,学习《数据结构》严蔚敏版讲义,有助于理解如何有效地组织和操作数据,这对于编写高效且易于维护的计算机程序至关重要,无论是在系统软件开发还是应用软件设计中,数据结构都是开发者必备的基础知识。...

    pb9树型datawindow

    PB9树型DataWindow是PowerBuilder 9(简称PB9)中的一个重要组件,它用于在应用程序中展示层次结构数据,通常以图形化的树状结构显示。这种数据窗口类型非常适合处理数据库中具有层级关系的数据,例如部门结构、产品...

Global site tag (gtag.js) - Google Analytics