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

SQL Server 数据库维护计划(详述) 十一了,公司对于数据的备份提到日程上来。此篇文章详细描述了自动备份的过程,也许会避免您的缧绁之忧。具体实现步骤 目录 第一步:打开SQL Server“企业管理器”窗体 第二步:找到“数据库维护计划”功能 第三步:创建“数据库维护计划” 第四步:维护和管理“数据库维护计划” 第五步:启动SQL Server 2000代理以便执行“作业” 第六步:检查结果 “数据库维护计划”功能 阅读详情

树型结构数据的存储采用:
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]


相关文章
.Net/C#: 利用反射编写通用的 rss 2.0 的 reader
.Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)
升级到 JDK 5.0 Update 1 定制部署 WebServices - Axis 终于正常了!
补充 宝玉 之《URL欺骗之以假乱真!》之 POST 方法提交数据 之 处理!
给 OpenPOP.Net 加一个小功能,可用于收取邮件时监测数据流量!
对该文的评论
j9988 ( 2004-03-06)
这么好的贴,我今天才发现。困感!!
playyuer ( 2003-06-12)
order by MaxID desc,orderid
yhwebus ( 2003-06-09)
有个地方搞不懂  
为什么通过下面的步骤可以将帖子提到前面呢?
如果要指定将一个帖子提前呢?或将一个子树到平行的其它子树之前

  update Tree
         set maxid = (select max(id) 
                       from Tree
                     )
      where rootid = (select rootid 
                        from tree 
                       where id=@id
                     )
yhwebus ( 2003-06-09)
--删除一个节点及其子树
if exists (select * from sysobjects where id = object_id(N'[dbo].[AppSP_Delete]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[AppSP_Delete]
GO
create procedure AppSP_Delete
@ID integer
as 
delete from tree where 
('-'+ remark  + '-' + cast(parentid as varchar) + '-' + cast(id as varchar)+'-') like '%-'+convert(nvarchar,@ID)+'-%'
        or [ID]=@ID
go 
white ( 2003-06-03)
树型结构这样存储是很方便的,如果再加上聚集索引,查询速度与查询普通表没什么区别。
我最近遇到的一个难题是有向图在数据库中的存储,图中每个节点可能有多条线进入,也可能有多条线出去。
要求能遍历,还要反向遍历,从任意一个节点找回到开始节点去。

 http://topic.youkuaiyun.com/t/20030418/11/1677669.html;http://dev.youkuaiyun.com/develop/article/18/18666.shtm

构建树型待办事项应用:Todd 深度解析 在项目管理和任务分配中,树型结构因其直观和层次化的特性,成为一种有效的数据组织方式。其能够清晰地映射出任务之间的上下级关系,有助于团队快速理解任务的依赖性和优先级。 阅读详情

相关推荐

huggingface 镜像站推荐

在做 Ai 应用开发或者学习的时候,我们经常需要下载各种模型,而 huggingface 的模型下载速度很慢或者根本就连不上,这里推荐一个 huggingface 的镜像站,速度很快,可以大大提高我们的效率。

t951984189的博客 1万+

树型问题的解决方法

这是一个多级的树(TREE)罢了,其实原理是类似于俺们这个论坛的结构,俺们是这样来实现的主要数据结构[  id  ]                                    长整型[  num_replied  ]                  双精度型[  num_followed  ]                双精度型[  num_lasttime  ]        

纯净的天空 2137

OSMDroid(1)——OSM简介,基础例子搭建

1.OSMDroid简介 Osmdroid是一款完全开源的地图基本操作SDK,相比于现在普遍使用的百度地图,高德地图,谷歌地图等最大的好处就是开源。 最近在做一个军方项目,要求完全不能联网,从开发到应用整个阶段都是在局域网进行,相比之下采用了OSMDroid这个SDK作为解决方案。 先来看OSMDroid,便是(OpenStreetMapForAndroid),后面都简称OSM...

robotskly的博客 6178

树型数据在关系数据库中的存储方式辨析

本文成文于2014年2月,背景是TiEAF(基础业务平台)设计之初“模型树”的存储方式选型。笔者在文中对关系数据库中常用的树型结构的存储方式进行了描述和辨析。现将其整理发表以供读者参考。

李明子的专栏 1万+

HTB_Bike靶机之模板注入

船到桥头自然直 文章目录信息收集模板引擎SSIT 模板注入后放答案 信息收集 日常 A 扫描,两个端口 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA) | 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:.

网络安全学习 797

【ES】--Elasticsearch的分词器深度研究

分词器是ik_max_word,会将“龙马家书”拆分为“龙马”、“马家”、“家书”。然后filter配置的是edge_ngram_filter,在上面拆分的token词组基础上,按照edge_ngram_filter规则进一步拆分。从结果看:分词器是keyword,filter支持edge_ngram_filter,字符过滤器支持tsconvert【简繁体】。分词器是keyword,表明是不进行分词,但filtet中edge_ngram_filter是按照布长方式拆分token,所以得到如此结果。

寻梦友的博客 2420

一种理想的在关系数据库中存储树型结构数据的方法

转自:http://hi.baidu.com/genet/blog/item/fbc5ba0acf73b33bb1351d91.html 在各种基于关系数据库的应用系统开发中,我们往往需要存储树型结构的数据,目前有很多流行的方法,如邻接列表模型(The Adjacency List Model),在此基础上也有很多人针对不同的需求做了相应的改进,但总是在某些方面存在的各种各样的缺陷。   

GSE的成长之路 2818

红外协议 IR NEC 协议深度解析-简单易懂协议详解

1. 协议特征 使用双向编码(又称曼彻斯特编码); 使用38K载波对编码后的波形进行调制; 位时间 1.12ms 或 2.25ms 2. 调制 定义脉冲560µS为脉冲基本宽度T; 根据脉冲时间长短来解码。推荐载波占空比为1/3至1/4: (1) Logic “1” 位宽为2.25ms,脉冲时间560us(T + 3T); (2) Logic “0” 位宽为1.12ms,脉冲时间560us(T + T)。 (3 ) 重复码: 位宽为11.25ms,脉冲时间9ms(16T + 4T)。 3. 协议

代码打工人的博客 1万+

蛙蛙推荐:整理一个树型问题的解决方法。

蛙蛙推荐:整理一个树型问题的解决方法。我的问题:1.一个销售系统,设有各级代理商,每个代理商的表是这样设计的  数据库结构表1:  代理商资料表[id]                                    自动编号                        编号[lishu]                            长整型                    

蛙蛙池塘 1599

运算放大器多谐振荡器设计实战:从施密特触发器到波形生成

本文详细介绍了运算放大器在多谐振荡器设计中的实战应用,涵盖施密特触发器的迟滞比较原理、非稳态振荡器的自激机制以及单稳态和双稳态电路的设计技巧。通过具体案例和参数计算,帮助工程师掌握波形生成与信号处理的核心技术,提升电路设计效率与稳定性。

pz89012345的博客 217

FPGA原型验证(八):SoC设计适配与实现策略

时钟门控在SoC设计中很常见,应该小心处理门控时钟,以成功地在FPGA上原型化SoC设计。现代FPGA综合工具在正确约束的情况下,可以自动处理大多数门控时钟。通过遵循本章中的指导方针,即使具有复杂时钟门控的SoC设计也可以得到处理,并成功地在FPGA上进行原型化。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 477

树型结构解决方案

这是一个多级的树(TREE)罢了,其实原理是类似于俺们这个论坛的结构,俺们是这样来实现的主要数据结构[  id  ]                                    长整型[  num_replied  ]                  双精度型[  num_followed  ]                双精度型[  num_lasttime  ]        

knight_0827的专栏 1991

【大模型学习】第二十四章 生成式人工智能(GAI)简介

‌的AI技术,其核心目标是通过学习数据中的规律,生成与训练数据类似但全新的文本、图像、音频、视频甚至代码。生成式人工智能(GAI)是一类能够‌。

以实战经验介绍行业知识 1637

用数据库按照树型结构存储系统参数

在设计系统时经常需要存储很多配置参数,如果配置参数使用文件存储,那么当系统需要做集群或者双机热备等需要将系统部署到多个地方时,将对参数的更改带来非常复杂以及烦琐的工作:不得不修改每个系统拷贝的配置文件.因此将参数使用数据库存储不失为一个好办法,但是关系数据库是二维数据,数据的展现能力不足,如果能够类似于windows注册表一样提供树型参数配置,那么参数配置将变得非常灵活。数据库使用oracle

shangqiao的专栏 819

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

树型结构建模白皮书

树结构是递归自引用的数据结构。每个节点仅有一个父节点(除根节点外),可能有多个子节点,通常表示层级关系、继承关系、归属关系。建模原则推荐操作数据稳定性优先邻接表为首选,利于维护查询效率优先闭包表或嵌套集合节点频繁移动邻接表或路径枚举可扩展性与灵活性优先闭包表 + 元数据系统辅助建模建议配合领域建模与权限体系设计分类/部门/菜单建议统一策略。

nbsaas-boot基于Request-Response的企业级快速开发框架 1140

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机三级数据库复习8-数据库运行维护与优化

未来教育第十章题目笔记_数据库运行维护与优化 1、在客户机和数据库服务器上使用数据库管理系统自带的客户端程序分别执行都很慢,则排除了网络对于数据处理操作的影响。 3、数据库维护工作包括: ①数据库转储与恢复 ②数据库安全性、完整性控制 ③检测并改善数据库性能 ④数据库重组和重构:重组不修改数据库原有设计的逻辑结构和物理结构,重构部分修改模式和内模式 4、传统的索引有有序索引、树型索引都是建立在"比较"的基础上,即在结构中查找记录时需要进行一系列与关键字的比较。理想的情况是不希望经过任何比较,一次存取便能得到

TOPic666的博客 838

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

浅谈数据库设计技巧

说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法。面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据

4万+

数据存储方案-邻接列表模式

在程序开发中,我们常遇到用树型结构来表示某些数据间的关系,如企业的组织架构、商品的分类、操作栏目等,目前的关系型数据库都是以二维表的形式记录存储数据,而树型结构的数据如需存入二维表就必须进行Schema设计。 Adjacency List(邻接列表模式) 简单的说是根据节点之间的继承关系,显现的描述某一节点的父节点,从而建立二位的关系表。 表结构通常设计...

weixin_33955681的博客 210

数据库经典设计案例

说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法。面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加...

优快云1332531529的博客 3499

数据库系统原理名词解释

1、 DB:即数据库( Database), 是统一管理的相关数据的集合 . DB 能为各种用户共享,具有最小冗余度,数据间联系密切,而又有较高的数据独立性 . 2、DBMS :即数据库管理系统( Database Management System),是位于用户与 操作系统 之间的一层数据管理软件, 为用户或应用程序提供访问 DB的方法,包括DB的建立、查询、更新及各种数据控制 . DBMS总是基于某种数据模型,可以分为层次型、网状型、关系型、面向对象型 DBMS. 3、DBS:即数据库系统( Datab

qq_40907977的博客 5442

数据库设计实例

说到数据库,我认为不能不先谈数据结构。1996年,在我初入大学学习计算机编程时,当时的老师就告诉我们说:计算机程序=数据结构+算法。尽管现在的程序开发已由面向过程为主逐步过渡到面向对象为主,但我还是深深赞同8年前老师的告诉我们的公式:计算机程序=数据结构+算法。面向对象的程序开发,要做的第一件事就是,先分析整个程序中需处理的数据,从中提取出抽象模板,以这个抽象模板设计类,再在其中逐步添加处理其数据

望月思灵 1万+
上一篇: 网站开发中经常用到的javaScript技术
下一篇: 面向对象的JavaScript编程
fest
博客等级 码龄21年 3粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值