n级分类的数据结构
2009-01-15 16:29
155 查看
1、n级分类的数据结构
2、我的树的数据结构和页面展现
3、在权限方面的应用
快过年了,先给大家拜个早年,祝大家新的一年里多多发财,呵呵。现在做什么都要提前,拜年也提前把。
这个树的结构几年前在csdn里面也发过了一次,现在看看,主体结构居然没有什么变化,用了这么长的时间,自我感觉还是很好用的。而且在这个基础之上把其他的功能也都给联系起来了,比如“通用权限”、配置信息等。对,权限是和这个有很大关系的,不过这种关系并不是大家想的“紧耦合”,具体是什么关系呢,待我慢慢讲来,o(∩_∩)o...。
由于我喜欢使用数据库,所以呢,这里就以数据库为主来说明。
1、基本的n级分类的结构。
树,本身就是一个n级分类,所以呢还是先从这个说起。n级分类,一般会想到这样的表结构
【Test_Tree的截图】
本来有三个字段(id,title,parentID)就够用了,但是如果只有这三个字段的话,在使用起来会有一些麻烦,所以呢大家会在这个基础之上加一些辅助字段,严格来说后加的字段大多都属于“冗余”字段,但是有时候“冗余”也是很有必要的。
2、增加一个“编号”
拿上面的例子来说,可以加一个“编号”,比如“树状结构的演示”叫做“01”,他的第一个子节点“ 基本的n级分类”叫做“0101”,第二个子子节点“加一个‘编号’”叫做“0102”。如下图。
优点:增加的这个“编号”可以实现很多的功能,
a、[编号的长度 / 2] 表示节点的“深度”(也就是第几级节点),
b、[编号]去掉最后两位,表示该节点的父节点ID,同时也可以做一个循环,一直找到根节点。
c、order by 编号 ,可以对整个树进行排序,而这个排序又和数的结构是相一致的。
【order by code 的效果】
把这些结合起来可以达到一个效果,那就是可以使用一个SQL语句来得到一个有缩进效果的记录集,可以用这个记录集直接绑定DropDownList控件。这样就避免了递归。
为了便于调用,我们可以建立一个视图,比如叫做 V_Test_Tree2 ,如下图
SELECT TOP 100 PERCENT NoteID, Code,
REPLACE(SPACE(LEN(Code) / 2 - 1), ' ', ' ')
+ NoteTitle AS NoteTitle
FROM dbo.Test_Tree
ORDER BY Code
思路:
先用 SPACE 函数 根据 code 的长度得到相应的空格,由于这个空格是半角的,在下拉列表框的item里面半角空格是不能够被显示出来的,所以呢需要使用replace函数把半角控件替换成全角空格,以达到站位的效果。
绑定后的效果是这样的。
树状结构的演示
基本的n级分类
加一个“编号”
我的树
功能演示
新闻管理
员工管理
【下拉列表框的演示】
缺点:
a、有容量限制,上面的例子,每一级里面只能有99个节点,多了就不好显示了。虽然说一般99个也就够用了,但是如果出现例外了怎么办呢?可以增加位数,变成3位的。但是修改起来并不是很容易。
b、不能使用“编号”作为主、外键进行多表关联。因为一旦功能结构(或者组织结构)发生了变化,那么就意味着这个“编号”也会随之发生变化,如果使用主键进行关联的话,那可是一件很恐怖的事情。
针对这些缺点进行了一下改进,改进结果就是我的树的结构了。
2、我的树的数据结构和页面展现
3、在权限方面的应用
快过年了,先给大家拜个早年,祝大家新的一年里多多发财,呵呵。现在做什么都要提前,拜年也提前把。
这个树的结构几年前在csdn里面也发过了一次,现在看看,主体结构居然没有什么变化,用了这么长的时间,自我感觉还是很好用的。而且在这个基础之上把其他的功能也都给联系起来了,比如“通用权限”、配置信息等。对,权限是和这个有很大关系的,不过这种关系并不是大家想的“紧耦合”,具体是什么关系呢,待我慢慢讲来,o(∩_∩)o...。
由于我喜欢使用数据库,所以呢,这里就以数据库为主来说明。
1、基本的n级分类的结构。
树,本身就是一个n级分类,所以呢还是先从这个说起。n级分类,一般会想到这样的表结构
【Test_Tree的截图】
本来有三个字段(id,title,parentID)就够用了,但是如果只有这三个字段的话,在使用起来会有一些麻烦,所以呢大家会在这个基础之上加一些辅助字段,严格来说后加的字段大多都属于“冗余”字段,但是有时候“冗余”也是很有必要的。
2、增加一个“编号”
拿上面的例子来说,可以加一个“编号”,比如“树状结构的演示”叫做“01”,他的第一个子节点“ 基本的n级分类”叫做“0101”,第二个子子节点“加一个‘编号’”叫做“0102”。如下图。
优点:增加的这个“编号”可以实现很多的功能,
a、[编号的长度 / 2] 表示节点的“深度”(也就是第几级节点),
b、[编号]去掉最后两位,表示该节点的父节点ID,同时也可以做一个循环,一直找到根节点。
c、order by 编号 ,可以对整个树进行排序,而这个排序又和数的结构是相一致的。
【order by code 的效果】
把这些结合起来可以达到一个效果,那就是可以使用一个SQL语句来得到一个有缩进效果的记录集,可以用这个记录集直接绑定DropDownList控件。这样就避免了递归。
为了便于调用,我们可以建立一个视图,比如叫做 V_Test_Tree2 ,如下图
SELECT TOP 100 PERCENT NoteID, Code,
REPLACE(SPACE(LEN(Code) / 2 - 1), ' ', ' ')
+ NoteTitle AS NoteTitle
FROM dbo.Test_Tree
ORDER BY Code
思路:
先用 SPACE 函数 根据 code 的长度得到相应的空格,由于这个空格是半角的,在下拉列表框的item里面半角空格是不能够被显示出来的,所以呢需要使用replace函数把半角控件替换成全角空格,以达到站位的效果。
绑定后的效果是这样的。
树状结构的演示
基本的n级分类
加一个“编号”
我的树
功能演示
新闻管理
员工管理
【下拉列表框的演示】
缺点:
a、有容量限制,上面的例子,每一级里面只能有99个节点,多了就不好显示了。虽然说一般99个也就够用了,但是如果出现例外了怎么办呢?可以增加位数,变成3位的。但是修改起来并不是很容易。
b、不能使用“编号”作为主、外键进行多表关联。因为一旦功能结构(或者组织结构)发生了变化,那么就意味着这个“编号”也会随之发生变化,如果使用主键进行关联的话,那可是一件很恐怖的事情。
针对这些缺点进行了一下改进,改进结果就是我的树的结构了。
相关文章推荐
- 郝斌数据结构(1)----数据结构基本分类和链表创建
- 数据结构-Prim算法 分类: C语言 2012-05-11 07:25 798人阅读 评论(1) 收藏
- 无限极分类的数据结构
- 数据结构 的分类
- 数据结构的分类
- 常用数据结构的一部分类
- 数据结构_图_定义/分类/顶点与边之间的关系/连通图/存储结构/基本操作
- 数据结构:八大数据结构分类
- java中常见的数据结构分类
- 常用数据结构及其分类
- 小白学数据结构——零、算法初步(算法分类及最大子数组小试牛刀)
- 【郝斌数据结构自学笔记】16-23_链表的定义与分类_链表节点插入与删除_每一个链表节点的数据类型该如何表示的问题
- 【郝斌数据结构自学笔记】35-46_队列的定义、分类_链式队列伪算法的讲解_循环队列伪算法的讲解
- 数据结构学习——链表的基本概念和分类
- 数据结构的概念和分类
- 高级数据结构及算法分类
- 临床文档数据结构之-文档分类
- 数据结构分类
- 【郝斌数据结构自学笔记】60-65_树的定义_树的专业术语解释_树的分类_二叉树连续存【重点】_二叉树的链式存储_普通树的存储
- 【数据结构】数据、数据结构(分类)、抽象数据结构