无限级分类表设计

无限级分类表设计

一般的多级分类表的表结构字段如下:
多级分类类型表
T_ContentsType
Id,
ParentId,
TypeName,
CreateTime,
Orders

其它很多情况下2级,3级情况比较多见,真正的有N多级的情况比较少见,这种情况就用上表即可解决,Id自增;
缺点是单从类型Id很难知道是哪个分类;

但如果只有2,3级的情况下,Id我们可以不用自增Id,用数字编码的形式来做更有意义,而且可读性会更好;
比如
一级Id从100000起,每个一级分类递增100000;
100000;
200000;
300000;
......

二级三级分类
100000;(一级)
    100100;(二级)
        100101;(三级)
        100102;(三级)
        100103;(三级)
    100200;(二级)
    100300;(二级)
200000;(一级)
    200100;(二级)
        200101;(三级)
        200102;(三级)
        200103;(三级)
300000;(一级)

这样设计的话从编码本身就可以看出属于那个分类和层级,但缺点是每个分类下只能有100个分类,超出编码就乱了;
 
更灵活点的做法是,二,三级可以视分类数目情况来调整,如果二级分类少,三级分类多的话,可以调整为如下的方式
二级三级分类
100000;(一级)
    101000;(二级)
        101001;(三级)
        101002;(三级)
        101003;(三级)
    102000;(二级)
    103000;(二级)
200000;(一级)
    201000;(二级)
        201001;(三级)
        201002;(三级)
        201003;(三级)
300000;(一级)

即2级只支持10个,3级可以支持1000个;
其它的话,只要1级分类不变,2,3级分类可以根据每个不同分类的情况自行定义编码规则,这样灵活性会更好!

对于编码还有种做法是用字符串做编码,比如32位字符串(4+7+7+7+7)这样每个分类下支持的数目会更多,
4+7+7+7+7格式也不是固定的,可以根据需要灵活调整; 但编码一长的话缺点也出来了,就是可读性变差了,因为太长人很难记得住对应关系了!

如果大家有更好的设计方式,不妨留言交流,非常感谢!

你可能感兴趣的:(C#,Java,数据与性能)