标签:status nts sql alt body int incr cad rds
设计一个无限级分类的数据表是一个很常见的数据库任务。比如你写一个CMS,需要有4,5级分类的栏目,反正就是很普遍,所以还是需要了解一下。下面本专题的所有内容,都是我自己随手演示写写,仅仅供参考,绝不是标准答案。
我们先设计一个数据表吧,一个可供无限级分类的数据表。
SQL语句设计如下:
01 |
CREATE TABLE `categories` ( |
02 |
`id` int(10) unsigned NOT NULL auto_increment, |
03 |
`name` varchar(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 | 优先级,越大,同级显示的时候越靠前 |
大概就设计成这样,为什么要这样设计,后面章节慢慢叙述。当然会有设计上不合理的地方,仅仅抛砖引玉
标签:status nts sql alt body int incr cad rds
原文地址:https://www.cnblogs.com/tsql/p/9025123.html