zoukankan      html  css  js  c++  java
  • [收集] 各式各样的 无限级分类 的数据库设计方案

    第一种方案:

    表为两张,一张分类表,一张信息表。 
     表1: 
     `ID` int(10), 
     `cID` tinyint(3) , 
     `title` varchar(255), 
     表2:
    `cID` tinyint(3) , 
     `parentID` tinyint(3),  
     `order` tinyint(3) , 
     `name` varchar(255),

    这样可以根据cID = parentID来判断上一级内容,运用递归至最顶层 。

    第二种方案:

    设置parentID为varchar类型,将父类id都集中在这个字段里,用符号隔开,比如:1,3,6 
     这样可以比较容易得到各上级分类的ID,而且在查询分类下的信息的时候,可以使用如:Select * From information Where cID Like "1,3%"。不过在添加分类和转移分类的时候操作将非常麻烦。

    以上两种方案地址:http://search.phpres.com/phpres-top2007,98552.html

    第三种方案:

     每级分类递增两位数字,这样,每级分类的数目限定在100个之间,分类方法主要为编码法;
    示例:
    一级分类:01,02,03
    二级分类:0101,0102,0103,0201,0202........
    三级分类:010101,010102,010103,010104..........

    数据库查询时使用 like '01%'就可得到一级分类01下的所有子分类,非常方便!
    如果要列出所有分类的树型结构,只需用一条语句select * from pro_class order by code,再稍微处理一下就可。(其中,pro_class为产品分类表,code为类别编码)。


    设计的数据库结构如下:

    id:                    类别id,主键
    classname:         类名
    classcode:          类别编码
    parent:             父id
    left_child:          最左孩子id(或第一个孩子)
    right_sibling:      右兄弟id
    layer:                层级(第一级类别为1,第2级类别2,以此类推)

    以上三种的缺点?优点?还有其它方案吗?

  • 相关阅读:
    HDU 5640 King's Cake
    HDU 5615 Jam's math problem
    HDU 5610 Baby Ming and Weight lifting
    WHU1604 Play Apple 简单博弈
    HDU 1551 Cable master 二分
    CodeForces659C Tanya and Toys map
    Codeforces 960E 树dp
    gym 101485E 二分匹配
    Codeforces 961E 树状数组,思维
    Codeforces Round #473 (Div. 2) D 数学,贪心 F 线性基,模板
  • 原文地址:https://www.cnblogs.com/tsql/p/9025083.html
Copyright © 2011-2022 走看看