ID int 主键

OBJECTNAME nvarchar(50) 对象名称

OBJECTTYPE  nvarchar(1)  对象级别

PARENTID int 对象父ID

其实对象级别这个字段可以要也可以不要,只是这样清晰些。可以知道你的树有多少级。下面是一般的树形结构:

树形结构的表结构如下:

/********* Object:  Table [dbo].[Tree] ******/
Create TABLE [dbo].[Tree] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[PID] [int] NULL ,
[Name] [varchar] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

Create  CLUSTERED  INDEX [IX_Tree] ON [dbo].[Tree]([PID]) ON [PRIMARY]
GO

Alter TABLE [dbo].[Tree] WITH NOCHECK ADD
CONSTRAINT [PK_Tree] PRIMARY KEY  NONCLUSTERED
(
  [ID]
)  ON [PRIMARY] ,
CONSTRAINT [子ID不能等于父ID] CHECK ([ID] <> [PID])
GO

Alter TABLE [dbo].[Tree] ADD
CONSTRAINT [FK_Tree_Tree] FOREIGN KEY
(
  [PID]
) REFERENCES [dbo].[Tree] (
  [ID]
)
GO

树形结构数据库表查询

  不用嵌套调用,直接用一个语句就可以生成树,用临时表写了一个存储过程,改写为一个表值函数,供大家参考:

  查询树表语句的表值函数如下:

29/********* 对象:  用户定义的函数 dbo.fGetTreeTable ******/
30Create FUNCTION dbo.fGetTreeTable
31 (
32 @ID int= null
33 )
34RETURNS @Tab TABLE(ID int, PID int, Name varchar(10), Lev int)
35AS
36 BEGIN
37  Declare @lev int
38  Set @lev=0
39  
40  While @lev=0 or @@ROWCount>0
41  Begin
42   Set @Lev=@Lev+1
43   Insert @Tab(ID, PID, Name, Lev)
44   Select ID, PID, Name, @Lev From Tree Where (@Lev=1 and ((PID=@ID) or (@ID is null and PID is null))) or (PID in (Select ID From @Tab Where Lev=@Lev-1))
45   order by ID
46  End
47  RETURN
48 END
49
50GO
51
52--实际数据
53Insert Tree(PID, Name) values(null, 公司)
54Insert Tree(PID, Name) values(3, IT)
55Insert Tree(PID, Name) values(1, Fin)
56Insert Tree(PID, Name) values(5, XZ)
57Insert Tree(PID, Name) values(1, HR)
58GO

  直接查询Select * from dbo.fGetTreeTable(null)就可以输入所有记录。

转载于:https://www.cnblogs.com/pinbo/archive/2010/10/22/1858307.html

树形结构的数据存储和数据库表设计相关推荐

  1. Python3,网站搭建之数据库表设计及数据存储!文末的彩蛋,我酸了~

    搭建自己的网站,是作为一个码农成功标志之一, 那其他成功标志有啥呢, 嘿- 左手搂着白富美,右手撸着小烧烤,脚底踩着桑塔纳- 嗯~ 这么潇洒的人生,就从数据库表设计及数据存储开始吧! 数据库表设计及存 ...

  2. 【C/C++13】天气APP:数据挖掘/HTTP协议/非结构化数据存储(filetoblob.cpp),数据管理/监控告警(hsmtable.cpp,tbspaceinfo.cpp)

    文章目录 1. 数据挖掘:/etc/rc.local,sudo su 2.HTTP协议:优先wget 3.非结构化数据存储:blob,pzhrain24file 4.数据管理子系统:数据字典表 5.监 ...

  3. 结构化数据存储,如何设计才能满足需求?

    阿里妹导读:任何应用系统都离不开对数据的处理,数据也是驱动业务创新以及向智能化发展最核心的东西.数据处理的技术已经是核心竞争力.在一个完备的技术架构中,通常也会由应用系统以及数据系统构成.应用系统负责 ...

  4. 海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解

    前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库.Tablestore在阿里云官网上有各种文档介绍,也发布了很多场景案例文章,这些文 ...

  5. php二级分销数据表的设计,无限级分销系统数据库表设计

    在做交易所的时候有个需求,需要统计邀请注册人数,比如 A邀请B, B邀请C, C邀请D.那么A的邀请人数就是3个,B的邀请人数就是2个,C的邀请人数就是1个.除此之外,还要能统计出A直接邀请人数,A下 ...

  6. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  7. 爬虫数据存储到数据库/增量爬虫+多级页面获取=====安居客信息爬取

    文章目录 前言 一.增量爬虫是什么? 二.python数据存储到数据库 三.多级页面的跳转获取 四:遇到的问题以及解决 五:代码 总结 前言:这次的爬取内容是安居客网页里面的信息,首先是我爬取的页面是 ...

  8. Java返回树形结构的数据 (children方式)

    以children这种方式的实体类来遍历子父级的树形结构. //问题分类下拉表 @Override public List<DA> selectDA(Long deptId,Long us ...

  9. 将不同数据存储到数据库中_如何将数据存储在兔子洞中

    将不同数据存储到数据库中 Starting with databases and venturing into how the physical components of a computer st ...

最新文章

  1. 锐捷交换机配置snmp版本_snmp交换机配置
  2. OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划
  3. Phpstorm 9 关闭拼写检查
  4. 设计前沿:16款扁平风格 iOS 7 图标设计
  5. 物流项目宣传活动任务前台分页展示
  6. netty系列之:channelHandlerContext详解
  7. react --- render持续调用解决方案
  8. 错误:未启用当前数据库的SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。...
  9. 在quartusii如何设计出一个 3 位的十进制加法计数器的原理以及它的设计电_从算盘到计算机,从十进制到二进制,人类计算能力的提升...
  10. 服务器系统的安装方法,服务器的操作系统安装方法
  11. JVM学习笔记(一)JDKJREJVM
  12. From the overall look and feel
  13. 如何搭建j2ee开发环境
  14. hp1015驱动64位_惠普1015打印机驱动下载
  15. vue项目获取浏览器地址栏参数方法 ?aaa=111bbb=222(非路由传参)
  16. QQ来信息突然没声音了
  17. 14.[保护模式]TSS任务段
  18. 百度地图常用jsapi
  19. 【Azure Data Platform】ETL工具(20)——创建Azure Databricks
  20. Hadoop 基本常用命令

热门文章

  1. 【转】杀人后一个孩子的做法…不看你会后悔的…
  2. php glob() 列出目录及文件
  3. 笔试算法复习——数组去重
  4. [C# 基础知识系列]专题六:泛型基础篇——为什么引入泛型
  5. JS+HTML画图的几种方法
  6. 题解【黑匣子_NOI导刊2010提高(06)】(洛谷P1801)
  7. 06jQuery-01-基本选择器
  8. Java Day 13
  9. Windwos中system、System32、SysWOW64区别
  10. JS----JavaScript中防抖和节流知识概述