zoukankan      html  css  js  c++  java
  • DotNet菜鸟入门之无限极分类(一)设计篇

    写这个教程的原因,是因为,无限极分类,在许多项目中,都用得到。而对于新手来说,不是很好理解,同时,操作上也有一些误区或者不当之处。所以我就斗胆,抛砖引玉一下,已一个常见的后台左侧频道树为例子,讲解一下剖析一下无限极分类的实战操作。

          既然是写给菜鸟的,那么我就不话结构图了,直接文字+代码来说明吧。

    正文

          无限极分类的关键就在于数据库设计时,进行了父类编号的记录,从而把所有的分类,链接了起来,成为一个链表样式的结构。

          这次我要讲的无限极分类设计如下:

             image

    (图1)

    创建的表的sql语句如下,具体字段的说明见(图1)

    CREATE TABLE Channel(
    [id] [varchar](2000) NOT NULL,
    [channelName] [nvarchar](50) NOT NULL,
    [linkUrl] [varchar](200) NULL,
    [parentID] [varchar](2000) NOT NULL,
    [childNum] [int] NOT NULL,
    [orderNum] [int] NOT NULL
    )
    其中,约定的基类编号为C,也就是说,第一级的分类,父编号为C,第一个分类的编号为C001
    它的第一个子类编号为001,也就是说,每一级子类的编号为父类编号+ 000格式的数字。
    举例如下(名称 编号 父编号):
      
    |-食物 C001 C
    |-----蔬菜 C001001 C001
    |---------白菜 C001001001 C001001
    |---------萝卜 C001001002 C001001
    |---------冬瓜 C001001003 C001001
    |-----水果 C001002 C001
    |---------苹果 C001002001 C001002
    |---------橘子 C001002002 C001002
     

    说明:

    这样设计的优点:

    1)只要知道这个分类的编号,那么去掉后三位,就是此类的父类编号。例如,食物这个类别,代码是C001,那么去掉后三位,他的父编号就是C,而蔬菜这个类别,代码是C001001,去掉后三位,他的父类编号就是C001.

    如此,只要知道了一个分类的编号后,就不用再去查询数据库,找他的父类编号了。可以直接用程序算出,他的父类编号。

    2)方便的知道这个类别的深度,也就是几级分类。算法就是——(分类编号长度-1)/3。

    例如,食物这个分类的编号为 C001,那么他的分类级别为: (4-1)/3 = 1。

    那么蔬菜这个分类的级别就是: (7-1)/3 = 2。为2级分类。

    3)可以程序直接算出所有的父类,省去了递归的过程。

    例如冬瓜这个分类,循环去掉三位后,得到他的父类编号依次为:

    C001001 、 C001 、 C

    设计的缺点:

    1)主键不是数字类性,相对数字为主键的索引来说,速度稍慢,不过好在数据不会太多。

    2)扩展性不是很好,可以看出,这个无限极分类,同级别的分类最多只能分到999级别,即C001到C999,如果你想更多,那么可以设定为 C0001到C9999即9999个同类级别。不过一般说是无限极分类,但是999的同级别,一般情况下,就够用了。

    主要还是看需求来指定,是否是使用数字为主键和父类编号的分类,还是用字符的。

    提示:如果使用数字作为主键和父类编号,那么需要增加一个path路径字段,用来记录级别的路径记录。

    此种无限极分类的设计,就介绍到这里了。下一篇文章,写一下这种设计的操作及相关代码
  • 相关阅读:
    凸包模板
    F
    luogu P1220 关路灯
    [国家集训队]小Z的袜子
    [AHOI2009]维护序列
    luogu P3373 【模板】线段树 2
    [国家集训队]数颜色 / 维护队列
    luogu P3393 逃离僵尸岛
    [Usaco2005 Mar]Out of Hay 干草危机
    [USACO07NOV]牛栏Cow Hurdles
  • 原文地址:https://www.cnblogs.com/tsql/p/9025094.html
Copyright © 2011-2022 走看看