- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关系数据库表存储树形结构的方法
卷第 3 期
韩 山 师 范 学 院 学 报
Journal of Hanshan Teachers College
Vol . 24 No . 3
Sep12003
年 9 月
关系数据库表存储树形结构的方法
詹 速 汉
(韩山师范学院数学系 , 广东潮州 521041)
摘 要 : 介绍几种关系数据库表存储 、处理树形结构数据的实用方法 , 给出数据库表的组织结构
及检索 、插入 、删除 、修改等算法 .
关键词 : 关系数据库表 ; 树形结构 ; 存储 ; 检索 ; 插入 ; 删除 ; 修改
中图分类号 : TP311. 132
文献标识码 : A
文章编号 : 100726883 (2003) 0320116204
在计算机科学领域中 , 树形结构是一种常见且非常重要的非线性结构 , 对二叉树的存储及运算 ( 一般
(p54 —158) ;
转成二叉树进行处理) 、数据结构有专门讨论1
对比较特殊的树 , 如 : B 树 , B + 树 ( 子女数
(p84 —94) .
格限制) , 一般作为索引树 , 数据库系统中也有详细介绍2
在关系数据库应用开发中 , 大部分
理线性结构的数据 , 但也经常需要处理树形结构的数据. 目前关系数据库是数据处理中最有效的方法 ,
树形结构的数据 , 特别是对层数及子女数未知 、无限的树形结构 , 关系数据库没有对此作介绍 , 一般
计者使用一些技巧进行处理. 下面是在关系数据库应用系统开发中总结出来的几种比较实用的方法 .
关系数据库表存储处理树形结构的几种方法
单数据库表的实现方法
存储方法 : 只用一个数据库表存储全部树形结构及其数据 , 每个记录多一个指针字段 , 用于存放父结
“编号”, 对 “根结点”, 指针字段为空.
检索方法 : (1) 给出一个结点的 “编号”, 能立即找到该 “结点”, 并知道该 “结点”的 “父结点”,
直到找出 “根结点”. (2) 给出一个结点的 “编号”, 能方便地检索到该 “结点”的所有 “子女结点”.
一个临时表作为 “队列”, 由给出的 “编号”, 检索 “指针字段”的值为该编号的所有 “结点” ( 第一代
结点”) , 将第一代 “结点”的 “编号”加入 “队列”, 依次检索 “队列”中每一 “编号”对应的 “子
点” (第二代 “子女结点”) ,
直到找出所有的各代 “子女结点”.
插入方法 : 只要知道要新增 “结点”的 “父结点”的 “编号”, 作为该 “结点”的 “指针字段”的值 ,
将该结点增加到数据库表中 (新增的结点没有子女) .
删除方法 : (1) 若是 “叶结点”, 可直接删除 ; (2) 若是 “中间结点”, 必须先找出该结点的下一代子
点 , 重新登记这些结点的指针字段的值 ( 即新 “父结点”的编号) , 然后才作删除 ; ( 3) 若是 “根结
将下一代子女结点的指针字段的值改为空 , 这些结点转为 “根结点” (不然采用 (2) 方法 , 重新指定
点”) .
收稿日期 : 2002212220
作者简介 : 詹速汉 (1962 —) , 男 , 广东普宁人 , 韩山师范学院数学系讲师.
修改方法 : 结点的数据可直接修改 , 若要修改 “编号”, 对 “叶结点”可直接修改 , 对非 “叶结点”,
必须先找出该结点的下一代子女结点 , 并重新登记这些结点的指针字段的值 (即 “父结点”的新编号) .
多数据库表的实现方法
存储方法 : 树形结构中的每一层数据用一个数据库表存储 ( k 层就对应 k 个表) , 用一个专用表 ( 称头 部表) 来存放各数据库表的名称及层数 ; 每个记录数据有唯一 “编号”, 除用于存放首层的数据库表外 , 其 它数据库表的每个记录增加一字段 , 用于存放父结点的“编号”(相当于指针 ,由子女指向父结点) ,如图 1.
1 . 2
图 1 多数据库表的实现方法示意图
检索方法 : (1) 使用关系数据库表的一对多关联方法3 (p82 - 87) , 能形象化仿照树形结构浏览查询它的 子女结点 , 可由根结点一直到查询到树叶结点. (2) 给出一个结点的 “编号”, 必须从第一个表开始 , 依次 检索各表 , 直至查到该 “记录结点”为止 (若知道该记录结点为第几代 , 由头部表能直接查询该结点所在
的表) , 由指针字段 , 从上一个表能立即知道该 “结点”的 “父结点”,
可一直找到 “根结点”. (3) 给
出一个结点的 “编号”, 按
文档评论(0)