摘要:我们设计购物商城之类的网站的时候一般商品都会有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
插入数据示例:
如何高效查询
秘密武器:做自身连接起别名,然后利用左右连接来查询
自身连接为何物?同一个数据表对自身进行连接。注意一定要起别名!!
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.
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频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号