商品分类表设计

所要做的业务如下图所示:

表设计有两种方法:

方法1:

商品分类表(category)

包括字段:id, name, parentId

注:id为自增,第一级的父类ID设计为0。

商品与分类关联表(product_category)

包括字段:id, product, category

注:商品在添加时,与最后一级分类关联,但在存储时,要把所有的一级二级分类等都关联进来。

表数据如下:

id name parentId
1 服装 0
2 女装 1
3 男装 1
4 数码 0

方法2:

商品分类表(sku_scene_type)

包括字段:id, name

注:id为手动设置,两位表示一级

商品与分类关联表(product_category)

包括字段:id, product, category

注:商品在添加时,只需与最后一级分类关联。

表数据如下:

id name
100000 服装
100100 女装
100200 男装
200000 数码

商品分类数据添加语句:

 1 <insert id="insertByParenCode">
 2     insert into sku_scene_type
 3     <trim prefix="(" suffix=")" suffixOverrides=",">
 4       <if test="type.id != null">
 5         id,
 6       </if>
 7       typeCode,
 8       <if test="type.typeName != null">
 9         typeName,
10       </if>
11       <if test="type.typeDate != null">
12         typeDate,
13       </if>
14       <if test="type.operator != null">
15         operator,
16       </if>
17       <if test="type.modifyDate != null">
18         modifyDate,
19       </if>
20       <if test="type.typeStatus != null">
21         typeStatus,
22       </if>
23     </trim>
24     SELECT
25     <trim prefix=" " suffix=" " suffixOverrides=",">
26       <if test="type.id != null">
27         #{type.id,jdbcType=INTEGER},
28       </if>
29       <choose>
30         <when test="parentCode != null and parentCode != 0">
31           ifnull(MAX(typeCode), #{parentCode}) + 1,
32         </when>
33         <otherwise>
34           ifnull(MAX(typeCode) + 100, 1000),
35         </otherwise>
36       </choose>
37       <if test="type.typeName != null">
38         #{type.typeName,jdbcType=VARCHAR},
39       </if>
40       <if test="type.typeDate != null">
41         #{type.typeDate,jdbcType=TIMESTAMP},
42       </if>
43       <if test="type.operator != null">
44         #{type.operator,jdbcType=BIGINT},
45       </if>
46       <if test="type.modifyDate != null">
47         #{type.modifyDate,jdbcType=TIMESTAMP},
48       </if>
49       <if test="type.typeStatus != null">
50         #{type.typeStatus,jdbcType=CHAR},
51       </if>
52     </trim>
53     from sku_scene_type
54     <where>
55       <choose>
56         <when test="parentCode != null and parentCode != 0">
57           typeCode MOD 100 != 0 AND (#{parentCode} DIV 100 = typeCode DIV 100)
58         </when>
59         <otherwise>
60           typeCode MOD 100 = 0
61         </otherwise>
62       </choose>
63     </where>
64   </insert>

注:mysql中判断为空用 ifnull(),整除用DIV,求余用MOD

时间: 2024-12-11 04:18:41

商品分类表设计的相关文章

MySQL的多表设计

一.外键约束 保证数据的完整性. 定义外键约束: 可以直接在create语句中定义外键 foreign key 当前表名(字段名) references 目标表名(目标表的主键) 创建完语句后,可以直接使用修改语句定义 alter table 表名 add foreign key 当前表名 (字段名) references 目标表名(目标表的主键) 二.多表设计的三种实体关系 多对多.一对多和一对一 三.多表设计之---------一对多 一个班级可以有多个学生,但是一个学生只能属于一个班级.或

php不用递归完成无限分类,从表设计入手完整演示过程

无限分类是什么就不废话了,可以用递归实现,但是递归从数据库取东西用递归效率偏低,如果从表设计入手,就很容易做到网站导航的实现,下面是某论坛导航,如下图 网上无限分类大多不全面,今天我会从设计表开始, 首先我们先做视图界面, <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>白超华-博客园</title> &

mysql中的索引原理与表设计

索引是有效使用数据库的基础,但你的数据量很小的时候,或许通过扫描整表来存取数据的性能还能接受,但当数据量极大时,当访问量极大时,就一定需要通过索引的辅助才能有效地存取数据.一般索引建立的好坏是性能好坏的成功关键. 1.InnoDb数据与索引存储细节 使用InnoDb作为数据引擎的Mysql和有聚集索引的SqlServer的数据存储结构有点类似,虽然在物理层面,他们都存储在Page上,但在逻辑上面,我们可以把数据分为三块:数据区域,索引区域,主键区域,他们通过主键的值作为关联,配合工作.默认配置下

ERP开发分享 1 数据库表设计

这是我的ERP设计经验分享系列,今天讲的是数据库的表设计(1),主要阐述: 1.单字段的主键:2.使用int32作为主键类型:3.使用版本字段处理乐观锁定:4.生效字段标明是否允许“被使用”:5.锁定字段处理悲观锁定:6.行唯一字段处理分布式应用:

日志表设计一例分析

关于关系表的设计归根结底有两个方面.第一,就是完全按照范式理论去设计,一般来说达到第三范式就可以了,或者你可以划分的更细到达更上一层次.比如第四,第五,第六等等.这种设计有自己的可读性很强,但是有一点,在检索数据的时候增加了多张关系表来做关联的开销.第二,就是在范式理论上适当的做些反范式,有的东西还是不要太剥离的好.(窄表以及宽表) 这点和软件设计中的紧耦合松耦合理论一致. 下面我就以常用的LOG表来做下演示,其中有两种表的实际,一种是窄表,一种是稍微宽一点的表.窄表:log_ytt mysql

20170105数据库表设计知识点

20170105数据库表设计知识点 ------指导老师    星哥 1.PHP(MYSQL)擅长单表操作,不要做过多无谓的连接查询 2.表字段名不要使用大驼峰命名方式,最好采用下划线,命名要和团队习惯一致,通俗易懂. 3.表级.字段都要有注释 4.MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好.甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成.另外,MyISAM 对于 SELECT COUNT(*) 这类的计算

数据仓库专题(4)-分布式数据仓库事实表设计思考---讨论精华

一.前言 上一篇分享博文<数据仓库专题(3)--分布式数据仓库事实表设计思考>后,陆续有各位兄弟参加大讨论,提出了各种问题,关于分布式环境下,维表和事实表设计,进行了比较深入的探讨,在此汇集整理,分享给大家.希望能有更多人参与尽力啊,共同探索分布式数据仓库数据模型的设计. 二.纪要 [活跃]北京-RTB-胖哥(1106110976) 10:21:36 分布式模式下事实表设计思考: 做大做强事实表,做小做弱维表: [冒泡]杭州-电子病历<[email protected]> 10:2

无限树形结构的数据库表设计

前言: 无限树形结构的数据库表设计的是否合理,直接影响到UI层是否方便根据树来查询关联的数据. 1.表字段: F_BtEd2kTypeId int Unchecked F_Name nvarchar(50) Checked F_ParentTypeId nvarchar(50) Checked F_Code nvarchar(50) Checked F_RecordStatus int Checked 2.表数据: 3.说明: 如2所示, 1)如果上表的数据关联上了一张表A,通过BtEd2kTy

数据库表设计原则

(1)不应针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计:不同组件间所对应的数据库 表之间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统 或表结构的重构提供可能性. (2)采用领域模型驱动的方式和自顶向下的思路进行数据库设计,首先分析系统业务,根据职责定义对象.对象要符合封装的特性,确保与职责相关的数据项被定 义在一个对象之内,这些数据项能够完