无限级别的分类,很多项目中需要,就设计了一个,欢迎大家批评指正。
数据库结构如下(一张表):
CREATE TABLE [dbo].[tb_lb] (
[lb_id] [int] IDENTITY (1000000001, 1) NOT FOR REPLICATION NOT NULL , --类别编号
[lb_mc] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL , --类别名称
[lb_jb] [int] default 1 NOT NULL , --类别级别
[lb_sjbh] [int] default 0 NOT NULL , --类别上级编号
[lb_lj] [nvarchar] (400) COLLATE Chinese_PRC_CI_AS default 0 NOT NULL , --类别路径
[lb_bz] [nvarchar] (400) COLLATE Chinese_PRC_CI_AS NULL , --类别备注
[lb_isqy] [int] default 0 NOT NULL , --是否启用
[isdelete] [int] default 0 NOT NULL --是否已经删除[如果删除了就当是进回收站了]
)
示例数据如下:
lb_id lb_mc lb_jb lb_sjbh lb_lj lb_bz lb_isqy isdelete
--------------------------------------------------------------------------------------------------------------------------
1000000001 公司总部 1 0 0 单位首节点不可删除 1 0
1000000002 研发部 2 1000000001 0,1000000001 研发部 1 0
1000000003 .NET组 3 1000000002 0,1000000001,1000000002 .NET组 1 0
1000000004 JAVA组 3 1000000002 0,1000000001,1000000002 JAVA组 1 0
1000000005 GIS组 3 1000000002 0,1000000001,1000000002 GIS组 1 0
1000000006 客服部 2 1000000001 0,1000000001 客服部 1 0
1000000007 硬件组 3 1000000006 0,1000000001,1000000006 硬件组 1 0
1000000008 软件组 3 1000000006 0,1000000001,1000000006 软件组 1 0
1000000009 总经办 2 1000000001 0,1000000001 总经办 1 0
常见的应用需求:
1、读取某个类别下面的所有类别:只需搜索路径中含有当前类别编号的即可。
2、读取某个类别下一级的所有类别:只需搜索类别上级编号是当前类别编号的即可。
3、读取该类别的“来龙去脉”:首先根据当前类别读取出其路径,然后将路径的字符串加上当前的类别编号作为候选集,只需搜索类别编号在候选集里面的,排序的时候根据类别级别排序即可。(展示出来的时候,直接将该数据集绑定给DataList即可。)
---------------------------------------------------------------------
金色海洋(jyk)
1、字段名也太烂了呀。
2、还缺少两个字段,一个是子节点的数量,另一个是排序字段(大排序)。
3、1000000005 这个也太郁闷了吧,这么长还是int的,晕
@金色海洋(jyk)
1、坏习惯,是得改改,不然别人就看不懂了!
2、“子节点的数量”这里是记下一级节点的数量呢?还是所有下级节点的数量呢?不管是哪一个,当有需求将中间层次的某个级别的节点迁移另外一个节点下面的时候,这个数量计算相对麻烦。反过来如果想得到这里的数量,则很容易。所以该字段没有增加。
“另一个是排序字段(大排序)”不怎么明白,我理解的是同一级别的节点显示的顺序,这个后来的应用中已经加入了。
3、“1000000005 这个也太郁闷了吧,这么长还是int的”,之所以这么长是因为在实际应用中的时候,确实可以节省很多事。
转载于:https://www.cnblogs.com/datasky/archive/2008/05/26/1207325.html