设计一个无限级分类的数据表

Posted 无爱无伤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计一个无限级分类的数据表相关的知识,希望对你有一定的参考价值。

设计一个无限级分类的数据表是一个很常见的数据库任务。比如你写一个CMS,需要有4,5级分类的栏目,反正就是很普遍,所以还是需要了解一下。下面本专题的所有内容,都是我自己随手演示写写,仅仅供参考,绝不是标准答案。

我们先设计一个数据表吧,一个可供无限级分类的数据表。

SQL语句设计如下:

01 CREATE TABLE `categories` (
02   `id` int(10) unsigned NOT NULL auto_increment,
03   `namevarchar(50) NOT NULL,
04   `xname` varchar(50) NOT NULL,
05   `parentid` int(10) default ‘0‘,
06   `parentid_list` varchar(20) default ‘0‘,
07   `depth` varchar(10) default NULL,
08   `state` varchar(10) default ‘1‘,
09   `priority` varchar(10) default ‘0‘,
10   PRIMARY KEY (`id`)
11 DEFAULT CHARACTER SET utf8;

一会再介绍为什么字段要这么设计,先插入测试数据。顺便说下,数据是从亚马逊那里拿的几个栏目。

01 -- ----------------------------
02 -- Records of categories
03 -- ----------------------------
04 INSERT INTO `categories` VALUES (‘1‘‘图书‘null‘0‘‘1‘‘1‘‘1‘‘0‘);
05 INSERT INTO `categories` VALUES (‘2‘‘科技‘null‘1‘‘1,2‘‘2‘‘1‘‘0‘);
06 INSERT INTO `categories` VALUES (‘3‘‘计算机/互联网‘null‘2‘‘1,2,3‘‘3‘‘1‘‘0‘);
07 INSERT INTO `categories` VALUES (‘4‘‘医学‘null‘2‘‘1,2,4‘‘3‘‘1‘‘0‘);
08 INSERT INTO `categories` VALUES (‘5‘‘自然与科学‘null‘2‘‘1,2,5‘‘3‘‘1‘‘0‘);
09 INSERT INTO `categories` VALUES (‘6‘‘电脑办公‘null‘0‘‘6‘‘1‘‘1‘‘0‘);
10 INSERT INTO `categories` VALUES (‘7‘‘电脑整机‘null‘6‘‘6,7‘‘2‘‘1‘‘0‘);
11 INSERT INTO `categories` VALUES (‘8‘‘笔记本‘null‘7‘‘6,7,8‘‘3‘‘1‘‘0‘);
12 INSERT INTO `categories` VALUES (‘9‘‘平板电脑‘null‘7‘‘6,7,9‘‘3‘‘1‘‘0‘);
13 INSERT INTO `categories` VALUES (‘10‘‘服务器‘null‘7‘‘6,7,10‘‘3‘‘1‘‘0‘);
14 INSERT INTO `categories` VALUES (‘11‘‘家用电器‘null‘0‘‘11‘‘1‘‘1‘‘0‘);
15 INSERT INTO `categories` VALUES (‘12‘‘厨房电器‘null‘11‘‘11,12‘‘2‘‘1‘‘0‘);
16 INSERT INTO `categories` VALUES (‘13‘‘电饭锅‘null‘12‘‘11,12,13‘‘3‘‘1‘‘0‘);
17 INSERT INTO `categories` VALUES (‘14‘‘大家电‘null‘11‘‘11,14‘‘2‘‘1‘‘0‘);
18 INSERT INTO `categories` VALUES (‘15‘‘冰箱‘null‘14‘‘11,14,15‘‘3‘‘1‘‘0‘);

插入数据之后,数据表大概就成了这个样子:

技术分享图片

现在就很直观了吧,每个字段大概有什么作用,应该也能看出来了。

数据表字段简单说明:

列名 数据类型 默认值 备注
id int   自增主键
name varchar(50)   分类类别名称
parenid int 0 父母分类Id
parenid_list varchar(20) 0 分类的层级关系,从最高级到自己
Depth varchar(10) 1 深度,从1递增
Status varchar10) 1 状态:0禁用,1启用
Priority varchar(10) 0 优先级,越大,同级显示的时候越靠前

大概就设计成这样,为什么要这样设计,后面章节慢慢叙述。当然会有设计上不合理的地方,仅仅抛砖引玉

以上是关于设计一个无限级分类的数据表的主要内容,如果未能解决你的问题,请参考以下文章

无限级分类实现思路

MySQL技巧——无限级分类表设计

FreeSql 使用 ToTreeList/AsTreeCte 查询无限级分类表

MYSQL无限级分类表设计及自我连接

[收集] 各式各样的 无限级分类 的数据库设计方案

无限级分类实现思路 (组织树的分级管理)