树形结构的数据存储和数据库表设计
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
树形结构的数据存储和数据库表设计相关推荐
- Python3,网站搭建之数据库表设计及数据存储!文末的彩蛋,我酸了~
搭建自己的网站,是作为一个码农成功标志之一, 那其他成功标志有啥呢, 嘿- 左手搂着白富美,右手撸着小烧烤,脚底踩着桑塔纳- 嗯~ 这么潇洒的人生,就从数据库表设计及数据存储开始吧! 数据库表设计及存 ...
- 【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.监 ...
- 结构化数据存储,如何设计才能满足需求?
阿里妹导读:任何应用系统都离不开对数据的处理,数据也是驱动业务创新以及向智能化发展最核心的东西.数据处理的技术已经是核心竞争力.在一个完备的技术架构中,通常也会由应用系统以及数据系统构成.应用系统负责 ...
- 海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解
前言 表格存储Tablestore是阿里云自研的面向海量结构化数据存储的Serverless NoSQL多模型数据库.Tablestore在阿里云官网上有各种文档介绍,也发布了很多场景案例文章,这些文 ...
- php二级分销数据表的设计,无限级分销系统数据库表设计
在做交易所的时候有个需求,需要统计邀请注册人数,比如 A邀请B, B邀请C, C邀请D.那么A的邀请人数就是3个,B的邀请人数就是2个,C的邀请人数就是1个.除此之外,还要能统计出A直接邀请人数,A下 ...
- Android App开发基础篇—数据存储(SQLite数据库)
Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...
- 爬虫数据存储到数据库/增量爬虫+多级页面获取=====安居客信息爬取
文章目录 前言 一.增量爬虫是什么? 二.python数据存储到数据库 三.多级页面的跳转获取 四:遇到的问题以及解决 五:代码 总结 前言:这次的爬取内容是安居客网页里面的信息,首先是我爬取的页面是 ...
- Java返回树形结构的数据 (children方式)
以children这种方式的实体类来遍历子父级的树形结构. //问题分类下拉表 @Override public List<DA> selectDA(Long deptId,Long us ...
- 将不同数据存储到数据库中_如何将数据存储在兔子洞中
将不同数据存储到数据库中 Starting with databases and venturing into how the physical components of a computer st ...
最新文章
- 锐捷交换机配置snmp版本_snmp交换机配置
- OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划
- Phpstorm 9 关闭拼写检查
- 设计前沿:16款扁平风格 iOS 7 图标设计
- 物流项目宣传活动任务前台分页展示
- netty系列之:channelHandlerContext详解
- react --- render持续调用解决方案
- 错误:未启用当前数据库的SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。...
- 在quartusii如何设计出一个 3 位的十进制加法计数器的原理以及它的设计电_从算盘到计算机,从十进制到二进制,人类计算能力的提升...
- 服务器系统的安装方法,服务器的操作系统安装方法
- JVM学习笔记(一)JDKJREJVM
- From the overall look and feel
- 如何搭建j2ee开发环境
- hp1015驱动64位_惠普1015打印机驱动下载
- vue项目获取浏览器地址栏参数方法 ?aaa=111bbb=222(非路由传参)
- QQ来信息突然没声音了
- 14.[保护模式]TSS任务段
- 百度地图常用jsapi
- 【Azure Data Platform】ETL工具(20)——创建Azure Databricks
- Hadoop 基本常用命令