DotNet菜鸟入门之无限极分类(一)设计篇
写这个教程的原因,是因为,无限极分类,在许多项目中,都用得到。而对于新手来说,不是很好理解,同时,操作上也有一些误区或者不当之处。所以我就斗胆,抛砖引玉一下,已一个常见的后台左侧频道树为例子,讲解一下剖析一下无限极分类的实战操作。
既然是写给菜鸟的,那么我就不话结构图了,直接文字+代码来说明吧。
正文
无限极分类的关键就在于数据库设计时,进行了父类编号的记录,从而把所有的分类,链接了起来,成为一个链表样式的结构。
这次我要讲的无限极分类设计如下:

(图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路径字段,用来记录级别的路径记录。
此种无限极分类的设计,就介绍到这里了。下一篇文章,写一下这种设计的操作及相关代码
DotNet菜鸟入门之无限极分类(一)设计篇的更多相关文章
- PHP实现无限极分类的两种方式,递归和引用
面试的时候被问到无限极分类的设计和实现,比较常见的做法是在建表的时候,增加一个PID字段用来区别自己所属的分类 $array = array( array('id' => 1, 'pid' =& ...
- php无限极分类以及递归(thinkphp)
php无限极分类: 无限极分类重点在于表的设计: 1在model中: class CatModel extends Model{ protected $cat = array(); public fu ...
- js实现无限极分类
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- PHP无限极分类
当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一个,并且,写的很乱, ...
- PHP无限极分类,多种方法|很简单,这里说的很详细,其它地方说的很不好懂
当你学习php无限极分类的时候,大家都觉得一个字"难"我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究. 到网上一搜php无限极分类,很多,但好多都是一 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现
今天做一个管理后台菜单,想着要用无限极分类,记得园子里还是什么地方见过这种写法,可今天找了半天也没找到,没办法静下心来自己写了: 首先创建节点类(我给它取名:AdminUserTree): /// & ...
- 谈一次php无限极分类的案例
作者:白狼 出处:http://www.manks.top/php_tree_deep.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追 ...
- PHP无限极分类生成树方法,无限分级
你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...
随机推荐
- git基本的使用原理
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- OpenStack单节点网络设置
一.上传镜像文件 1.上传镜像 2.检索镜像 二.创建网络 1.创建内部网络 2.创建外部网络 3.创建内部网络子网 设置DHCP分配地址池,点击已创建 4.创建外部网络子网 注意:外部网络与仅主机( ...
- echarts折现图配置
js引用和div容器 <div id="container" style="height: 100%"></div> <scrip ...
- module 'pip' has no attribute 'pep425tags'
AMD64 import pip._internal print(pip._internal.pep425tags.get_supported()) 1 2 WIN32 import pip prin ...
- spark2.3.0 配置spark sql 操作hive
spark可以通过读取hive的元数据来兼容hive,读取hive的表数据,然后在spark引擎中进行sql统计分析,从而,通过spark sql与hive结合实现数据分析将成为一种最佳实践.配置步骤 ...
- useful tools and website
1.https://www.processon.com/ 在线流程图制作网站 2.http://www.easyicon.net/ 专门下载图标的网站 3.https://www.lfd.uci ...
- Echarts动态加载饼状图实例(二)
一.引入echarts.js文件(下载页:http://echarts.baidu.com/download.html) 二.HTML代码: <div class="ui-contai ...
- [work]Spring_Jdbc
封装Spring-RowMapper,使得使用更加灵活 import java.sql.ResultSet; import java.sql.SQLException; import java.uti ...
- 性能测试day02_后端网络协议架构
接着第一天的尾,继续来学习性能测试,上一次说到性能要大致经历哪些阶段,那么我们也来看下行业的做法: 行业有两种做法,一个是TPC,另一个是SPEC: TPC:指定业务类型,获得该指定业务的性能指标,也 ...
- angularjs探秘<五> 举足轻重的scope
scope在angular中的作用可谓举足轻重,不理解scope就不会angular: scope是应用在 HTML (view) 和 JavaScript (controller)之间的纽带. sc ...