电商项目数据库设计第五篇:参考京东商城详细讲解商品数据库设计

更新时间:2023-05-31 08:53:31 阅读: 评论:0

电商项⽬数据库设计第五篇:参考京东商城详细讲解商品数据库设计
围绕商品设计表
之前也写过类似的数据库设计⽅案,这⼀篇是为⼤家详细讲解参考京东商城围绕商品怎么来设计数据库,需要关注的细节很多,对字段进⾏详解,结合功能实现分析每⼀个字段设计的意义
⼤家看完这篇⽂章后可以看看前⾯四篇⽂章电商项⽬数据库设计⽅案,跟这⼀篇有点不同,之前是⼤多是参照苏宁易购来设计的
我们在设计数据库的时候,⼤多都是按照我们⾃⼰的实际需求来设计,提供这⼏篇仅为⼤家参考学习,能够举⼀反三参与到项⽬实战中,希望⼤家可以学到东西,同时,⽂章内容如果有错误的位置希望⼤家可以指正,共同学习。
接下来我们就⾔归正传,开始设计表
月考分析分类表
CREATE TABLE `tb_category` (
采购谈判技巧`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '类⽬id',
`name` varchar(32) NOT NULL COMMENT '类⽬名称',华为mate20参数
`parent_id` bigint(20) NOT NULL COMMENT '⽗类⽬id,顶级类⽬填0',
`is_parent` tinyint(1) NOT NULL COMMENT '是否为⽗节点,0为否,1为是',
`sort` tinyint(2) NOT NULL COMMENT '排序指数,越⼩越靠前',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '数据创建时间',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据更新时间',
PRIMARY KEY (`id`),
KEY `key_parent_id` (`parent_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1424 DEFAULT CHARSET=utf8 COMMENT='商品类⽬表,类⽬和商品(spu)是⼀对多关系,类⽬与品牌是多对多关系'
截取京东⾸页,如下图:
左侧菜单栏,即显⽰的商品分类,分类表我们应该设置哪些字段,我们可以参照京东商城思考下:
⾸先作为关系型MySQL数据库,我们先定下通⽤字段,id、create_time、update_time这三个字段。逻辑删除字段看⼤家需求,我这⾥是⾃⼰做demo,就没有设置逻辑删除字段了,is_delete boolean类型,之前也写过仿照苏宁易购设计过数据库,⼤家可以参考着看,仅供学习使⽤。
看上图,我依次在菜单⾥⾯框出三个,在分类表中我们如何对菜单进⾏表⽰,字段名如何设置,很简单,设置成level1、level2、level3三个字段分别表⽰就可以了,level1表⽰⼀级菜单,level2表⽰⼆级菜单,level3表⽰三级菜单,但是想想,我们在实际业务中,如果我们开发⼀个商城以后有亿级⽤户,想添加其他的分类后,是不是要加level4、level5·····,这样设计就有点不灵活了
所以我们可以这样设计,设计⼀个parent_id ⽤来表⽰⽗类⽬id进⾏关联,顶级类⽬就是0,满⾜可扩展性,⽽且字段也不冗余,符合三范式设计,什么是数据库设计三范式,/weixin_42437102/article/details/106422548 不了解的同学可以看看这篇⽂章。
在设计⼀个is_parentid⽤来表⽰是否是⽗id,如果不是⽗id,肯定就是最后⼀次菜单,这⾥我不说是三级菜单,可能我们以后会进⾏扩展
给⼀个sort字段进⾏权重分配,排序指数,指数越⼩越靠前,这⾥就设计好了分类表。
宝贝树
品牌表
CREATE TABLE `tb_brand` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '品牌id',
`name` varchar(64) NOT NULL COMMENT '品牌名称',
`image` varchar(256) DEFAULT '' COMMENT '品牌图⽚地址',
`letter` char(1) DEFAULT '' COMMENT '品牌的⾸字母',
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=325403 DEFAULT CHARSET=utf8 COMMENT='品牌表,⼀个品牌下有多个商品(spu),⼀对多关系'
设计数据表,我们依旧先列出通⽤字段,id、create_time、update_time
截取京东页⾯
从上图我们可以看出,品牌设计也不怎么复杂,我们先看最上⾯,所有品牌,⾸字母表⽰,所有我们设计⼀个letter字段,⽤来表⽰品牌的⾸字母,可以⽤来做搜索
继续往下看,我们能看到什么?⽆⾮就会品牌的logo和名称了吧,那就设计name字段表⽰名称,image字段表⽰品牌的logo。还有没有什么?
逻辑删除也可以设置,这个放在关联关系表来说!
品牌分类表
前⾯我们已经分析出了商品分类表和品牌表,他们之间有什么关系,我们这个阶段来屡屡
⾸先我们还是回到京东⾸页,也就是我们在设计分类表的时候截取的京东那张图⽚,对边点击⼀个三级分类,我这⾥点的⼿机,是不是看到的是品牌表这⾥的图⽚,也就是说,⼀个分类下有多个品牌,如:(⼿机:有华为⼿机,苹果⼿机,⼩⽶⼿机···)
接下来看⼀张图:
华为品牌下也有很多分类,所以⼀个品牌下也有很多分类
即分类表与品牌表是多对多的关系,多对多设计中间表
高中英语词汇表CREATE TABLE `tb_category_brand` (
`category_id` bigint(20) NOT NULL COMMENT '商品类⽬id',
`brand_id` bigint(20) NOT NULL COMMENT '品牌id',
PRIMARY KEY (`category_id`,`brand_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品分类和品牌的中间表,两者是多对多关系'
但是,你可能会发现,这张表中并没有设置外键约束,似乎与数据库的设计范式不符。为什么这么做?
外键会严重影响数据库读写的效率
不相信眼泪>如何野钓大鲫鱼
数据删除时会⽐较⿇烦
在电商⾏业,性能是⾮常重要的。我们宁可在代码中通过逻辑来维护表关系,也不设置外键。
教育思想如果使⽤逻辑删除是否可以解决这个问题,⼤家可以思考下。
商品参数表
商品参数表也是我们围绕商品进⾏表设计的⼀个必不可少的表设计,但是参数表改如何设计呢?按照我们的正常思维,⼀个商品有很多参数,⽐如⼀个⼿机,有品牌、产品名称、机⾝长度、机⾝重量、CPU、内存等等⼀系列,我们分别设计成字段,⼀张表也就⼏⼗个字段,但是想想,这样做会有什么不妥,⾸先,我们设计数据库是设计⼀个全品类的电商平台,商品有很多种,我们打开京东看看,
⼿机的规格与包装
空调的规格与包装
还有很多很多,如果都设计⼀张参数表,可想⽽知是不妥的吧
但是我们发现,虽然不同商品,规格不同。但是同⼀分类下的商品,⽐如都是⼿机,其规格参数名称是⼀致的,但是值不⼀样。也就是说,商品的规格参数应该是与分类绑定的。每⼀个分类都有统⼀的规格参数模板,但不同商品其参数值可能不同。
因此:
规格参数的名称(key)与值(value)应该分开来保存
⼀个分类,对应⼀套规格参数模板,只有规格参数key,没有值
⼀个分类对应多个商品,每个商品的规格值不同,每个商品对应⼀套规格的值
所以我们引⼊参数组与参数表

本文发布于:2023-05-31 08:53:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/955666.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设计   商品   数据库
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图