考试辅导

名师推荐

试听名师的课 查看所有名师

三级数据库辅导:树形结构的数据存储与数据库表设计 发布时间:2010-06-25 17:32 来源:互联网

  树形结构一般用于无限级分类,无论你使用Java,.Net,PHP,Python等语言平台进行开发应用,树形结构都是很常用的结构设计之一。
  本文主要解决树形结构的数据存储和数据库表设计。欢迎你可以根据你的应用,提出您的见解!以供讨论!
  树形结构的数据存储
  树形结构的表结构如下:
  /********* 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)就可以输入所有记录。

第一考试网友情提示:如果您遇到任何疑问,请登录第一考试网考试辅导频道或添加qq:,第一考试网以“为考友服务”为宗旨,秉承“快乐学习,轻松考试!”的理念,旨在为广大考友打造一个良好、温馨的学习与交流平台,欢迎持续关注。以上是小编为大家推荐的《三级数据库辅导:树形结构的数据存储与数据库表设计》相关信息。

编辑推荐

计算机等级考试辅导:SQL中JOB的运行状态

计算机等级考试辅导:SQLSERVER2005的引用

三级:把数据导入不同的表空间

2009年三级信息管理技术辅导:战略数据规划

教你三种方法卸载Windows7SP1Beta