posts - 58,  comments - 121,  trackbacks - 30
无限级别的分类,很多项目中需要,就设计了一个,欢迎大家批评指正。

数据库结构如下(一张表):
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的”,之所以这么长是因为在实际应用中的时候,确实可以节省很多事。
posted on 2008-05-26 10:11 datasky 阅读(1869) 评论(27)  编辑 收藏 网摘 所属分类: ASP.NETSql Server

FeedBack:
2008-05-26 13:14 | FLYabroad      
学习
  回复  引用  查看    
2008-05-26 13:15 | TT.Net      
字段名太不易懂了,换个人接手就要看好久才明白这个是啥字段
  回复  引用  查看    
2008-05-26 13:37 | Henllyee Cui      
其实实现的原理就是自身的ID跟父级别的ID.
  回复  引用  查看    
2008-05-26 13:59 | 挺麻烦的方法 [未注册用户]
凡人的智慧啊。。。。
  回复  引用    
2008-05-26 16:10 | 金色海洋(jyk)      
1、字段名也太烂了呀。
2、还缺少两个字段,一个是子节点的数量,另一个是排序字段(大排序)。
3、1000000005 这个也太郁闷了吧,这么长还是int的,晕
  回复  引用  查看    
2008-05-26 16:47 | bidaas      
5楼说出了我的心声
  回复  引用  查看    
2008-05-26 16:51 | kiler      
传说中的数据库字段用拼音简写+英文终于出现了,囧。
  回复  引用  查看    
2008-05-26 16:58 | beyoung1 [未注册用户]
#7楼 太搞笑了,呵呵.
  回复  引用    
2008-05-26 17:42 | zzz [未注册用户]
字段命名实在太~~~~~~~~~~~~
  回复  引用    
2008-05-26 17:57 | birdshome      
原来有个做实施的同事给我看过一段代码,把在场的人全数雷倒。。。
大概是这样一段:
int countUser;        // 产品数量
int avgWeight;       // 总重量
string productId;    // 用户名
string address;      // 产品描述
string time;           // 经手人
  回复  引用  查看    
2008-05-26 18:02 | .net'er      
学习一下.
  回复  引用  查看    
#12楼 [楼主]
2008-05-26 18:08 | datasky      
@TT.Net
@kiler
@zzz
@birdshome
诚心接受各位的批评,怕看不懂,所以写了注释,结果还是... 呵呵
  回复  引用  查看    
#13楼 [楼主]
2008-05-26 18:20 | datasky      
@金色海洋(jyk)
1、坏习惯,是得改改,不然别人就看不懂了!
2、“子节点的数量”这里是记下一级节点的数量呢?还是所有下级节点的数量呢?不管是哪一个,当有需求将中间层次的某个级别的节点迁移另外一个节点下面的时候,这个数量计算相对麻烦。反过来如果想得到这里的数量,则很容易。所以该字段没有增加。
“另一个是排序字段(大排序)”不怎么明白,我理解的是同一级别的节点显示的顺序,这个后来的应用中已经加入了。
3、“1000000005 这个也太郁闷了吧,这么长还是int的”,之所以这么长是因为在实际应用中的时候,确实可以节省很多事。


  回复  引用  查看    
#14楼 [楼主]
2008-05-26 18:23 | datasky      
@Henllyee Cui
归根到底确实如您所说。呵呵
  回复  引用  查看    
2008-05-26 20:10 | wfnice12232322332 [未注册用户]
这样挺好的,不过,类别修改是挺麻烦的,例如:如果当前类别有好几个子类,把当前类别调到其他类别的下面。保存时,要下不少功夫啊
  回复  引用    
2008-05-26 20:32 | tttt [未注册用户]
--引用--------------------------------------------------
birdshome: 原来有个做实施的同事给我看过一段代码,把在场的人全数雷倒。。。
大概是这样一段:
<FONT face=Tahoma><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;countUser;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;产品数量</SPAN></FONT><SPAN style="COLOR: #008000"><BR><FONT face=Tahoma></FONT></SPAN><FONT face=Tahoma><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">&nbsp;avgWeight;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;总重量</SPAN></FONT><SPAN style="COLOR: #008000"><BR><FONT face=Tahoma></FONT></SPAN><FONT face=Tahoma><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;productId;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;用户名</SPAN></FONT><SPAN style="COLOR: #008000"><BR><FONT face=Tahoma></FONT></SPAN><FONT face=Tahoma><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;address;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;产品描述</SPAN></FONT><SPAN style="COLOR: #008000"><BR><FONT face=Tahoma></FONT></SPAN><FONT face=Tahoma><SPAN style="COLOR: #0000ff">string</SPAN><SPAN style="COLOR: #000000">&nbsp;time;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">&nbsp;经手人</SPAN></FONT>
--------------------------------------------------------

弓虽!

俺也倒了。。。!




  回复  引用    
2008-05-26 20:34 | tttt [未注册用户]
原来有个做实施的同事给我看过一段代码,把在场的人全数雷倒。。。
大概是这样一段:
int countUser; // 产品数量
int avgWeight; // 总重量
string productId; // 用户名
string address; // 产品描述
string time; // 经手人

--------------------------------------------------------

弓虽!

俺也倒了。。。!


--

cnblogs引用功能不好用!
  回复  引用    
2008-05-26 20:41 | 景仰 [未注册用户]
专程来拜牛人,设计的太鸡8牛B了。
  回复  引用    
2008-05-26 22:06 | 皇帝的新装      
呵呵。
  回复  引用  查看    
2008-05-26 22:48 | C#爱好者 [未注册用户]
哈哈。。。还可以
  回复  引用    
2008-05-26 23:16 | 蜀山雪狼      
--引用--------------------------------------------------
金色海洋(jyk): 1、字段名也太烂了呀。
2、还缺少两个字段,一个是子节点的数量,另一个是排序字段(大排序)。
3、1000000005 这个也太郁闷了吧,这么长还是int的,晕
--------------------------------------------------------
明明白白我的心。
  回复  引用  查看    
2008-05-27 08:23 | loworth      
@birdshome
哈哈 这个很有意思
  回复  引用  查看    
2008-05-27 09:18 | 爱在戏院前      
膜拜一下....
  回复  引用  查看    
2008-06-03 16:47 | plumsea [未注册用户]
我是使用:0.1.2.5.8这样做的。
ID 分类 路径
1 分类1 0
2 分类1_1 0.1
3 分类1_2 0.1.2
4 分类2 0
5 分类2_1 0.4
........
我大概是这样做的
  回复  引用    
2008-06-04 13:24 | jolboy      
@kiler
都用英文,如果接手的人是个英文二把刀,咋办~~~~~~如果拼音看不懂,就可以去死了

  回复  引用  查看    
2008-06-09 13:23 | 没剑      
--引用--------------------------------------------------
jolboy: @kiler
都用英文,如果接手的人是个英文二把刀,咋办~~~~~~如果拼音看不懂,就可以去死了

--------------------------------------------------------
楼上的(拼音高手):给偶翻译一下YY是什么意思吧~

  回复  引用  查看    
#27楼 [楼主]
2008-06-10 09:01 | datasky      
@没剑
呵呵!何必呢?!
单独YY只有你能明白!
奇怪了!我不是在每个字段的后面都加上注释了吗?就没看见?!!!
就算你是全英文又能说明什么?没有注释还不是晕倒一大片啊!!
怎么重点都在字段的命名上了?为何不在设计的思路上给点您的宝贵意见呢?
感觉博客园的气氛越来越要超越cnbeta的水平了。

  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-27 09:41 编辑过
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:


相关搜索:
无限级别 无限分类 数据库

相关链接:


 

欢迎加入Asp.net高手MSN群

  • asp.net.group#hotmail.com
  • asp.net_group#hotmail.com

与我联系

搜索

 

常用链接

留言簿

我管理的小组

我的标签

随笔分类(71)

相册

blogs链接

积分与排名

  • 积分 - 35317
  • 排名 - 1299

最新评论