MySQL数据库分类表设计与查询讲解
沉沙 2018-05-14 来源 : 阅读 3508 评论 0

摘要:​我们设计购物商城之类的网站的时候一般商品都会有MySQL数据库一级分类二级分类甚至三级分类或者再细分,如果按照传统思维我们可能会为每个级别的类别设置一张分类表然后再用外键去关联,虽然这样保证了没有冗余,但是我们完全没有必要设置这么多表,更何况商品类可以是无限细分的,我们不能因此而创建无数张表,这样多表连接查询时候会造成效率低下的问题,不利于性能的提升。这个时候我们如何只设置一张类别表而且保证没有冗余呢?本文将揭开MySQL数据库无限极分类表设计的面纱。

我们设计购物商城之类的网站的时候一般商品都会有一级分类二级分类甚至三级分类或者再细分,如果按照传统思维我们可能会为每个级别的类别设置一张分类表然后再用外键去关联,虽然这样保证了没有冗余,但是我们完全没有必要设置这么多表,更何况商品类可以是无限细分的,我们不能因此而创建无数张表,最最重要的是这样多表连接查询时候会造成效率低下的问题,不利于性能的提升。

这个时候我们如何只设置一张类别表而且保证没有冗余呢?接下来揭开无限极分类表设计的面纱。

 

至少包含三个字段,自身id,自身名,父级id.

先创建一张简单的表

   

CREATE TABLE tdb_goods_types(
 
type_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
 
type_name VARCHAR(20) NOT NULL,
 
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0

   

插入数据示例:

 MySQL数据库分类表设计与查询讲解

如何高效查询

秘密武器:做自身连接起别名,然后利用左右连接来查询

自身连接为何物?同一个数据表对自身进行连接。注意一定要起别名!!

1.左连接–以右表为子表

SELECT s.type_id,s.type_name,p.type_name
FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p
ON s.parent_id=p.type_id;

   

这样我们便高效的查到了任一子类id及其关联的父类id.

MySQL数据库分类表设计与查询讲解

2.右连接–以右表为父表


SELECT p.type_id,p.type_name,s.type_name
FROM tdb_goods_types AS p LEFT JOIN tdb_goods_type AS s
ON s.parent_id=p.type_id;

   

这样我们可以高效查到父类下所有的子类名称。 

 MySQL数据库分类表设计与查询讲解


本文由职坐标整理发布,学习更多的MySQL数据库知识,请关注职坐标MySQL频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 1
看完这篇文章有何感觉?已经有2人表态,50%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程