本系统实现的主要功能是商城后台管理系统和移动端微信小程序相关的业务,
同时还会涉及安全管理的用户登录和访问控制,
因此本系统业务所需要的数据库表可以为六部分:
- 系统业务相关表
- 会员业务相关表
- 商品业务相关表
- 门店业务相关表
- 购物车业务相关表
- 订单业务相关表
1.系统整体业务表关系
2.系统业务表结构
权限设计模型:以下五张表是基于角色的权限控制访问系统:RBAC0。
系统业务表包括:系统用户表、系统角色表、系统权限表、系统用户与角色关系表、系统角色与权限关系表。
该业务所涉及的上述5张表的关系如下图所示。
用户和角色是多对多,角色和权限是多对多。一个用户拥有的权限,是他所有角色的集合。
下面详细描述以上五张表的结构。
1.系统用户表 sys_user
系统用户表sys_user主要描述了后台管理系统用户的用户名、密码、email、status等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
user_id | bigint | 0 | 是 | 用户id |
username | varchar | 50 | 否 | 用户名 |
password | varchar | 100 | 否 | 登录密码(加密后的密码) |
varchar | 100 | 否 | 邮箱 | |
mobile | varchar | 100 | 否 | 手机号码 |
user_status | tinyint | 0 | 否 | 用户状态:0禁用,1正常 |
create_user_id | bigint | 0 | 否 | 创建者id |
create_time | datetime | 0 | 否 | 创建时间 |
shop_id | bigint | 0 | 否 | 店铺id |
2.系统角色表 sys_role
系统角色表sys_role主要描述了后台管理系统角色的角色名称、角色备注等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
role_id | bigint | 0 | 是 | 角色id |
role_name | varchar | 100 | 否 | 角色名称 |
remark | varchar | 100 | 否 | 备注 |
create_user_id | bigint | 0 | 否 | 创建者id |
create_time | datetime | 0 | 否 | 创建时间 |
3.系统权限表 sys_menu
系统权限表sys_menu主要描述了后台管理系统权限的菜单父id、菜单名称、菜单URL、菜单权限、菜单类型(0表示目录,1表示菜单,2表示按钮)、菜单序号等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
menu_id | bigint | 0 | 是 | 权限id |
parent_id | bigint | 0 | 否 | 父菜单ID,一级菜单为0 |
name | varchar | 50 | 否 | 菜单名称 |
url | varchar | 200 | 否 | 菜单URL |
perms | varchar | 500 | 否 | 授权(多个用逗号分隔,如:user:list,user:create) |
type | int | 0 | 否 | 类型:0目录、1菜单、2按钮 |
icon | varchar | 50 | 否 | 菜单图标 |
order_num | int | 0 | 否 | 排序 |
4.系统用户与角色关系表 sys_user_role
系统用户与角色关系表sys_user_role主要描述了后台管理系统用户与角色的关系,表中属性包含用户id、角色id。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
id | bigint | 0 | 是 | 标识 |
user_id | bigint | 0 | 否 | 用户id |
role_id | bigint | 0 | 否 | 角色id |
5.系统角色与权限关系表 sys_role_menu
系统角色与权限关系表sys_role_menu主要描述了后台管理系统角色与权限关系,属性包含权限id、角色id。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
id | bigint | 0 | 是 | 标识 |
menu_id | bigint | 0 | 否 | 权限id |
role_id | bigint | 0 | 否 | 角色id |
在实际开发中,读者可以根据需要自行扩展。
需要注意的是,系统相关的表涉及项目整合Spring Security进行安全管理控制;
同时系统用户表中的password字段赋值时,必须为加密后的密文。
3.商品业务表结构
商品业务表包括:商品类目表、商品分组标签表、
商品与分组标签关系表、商品属性表、商品属性值表、
商品评论表、商品表、商品sku表。
1.商品类目表 product_category
商品类目与商品的的关系是:一对多。
上图说明了商品的类目具体有哪些。
每个类目下可以包含多个商品,而每个商品只能属于一个类目。这种关系确保了商品信息的系统化和标准化,使得消费者能够更容易地浏览和搜索到他们感兴趣的商品。
商品类目表 product_category 主要描述了商品类目的类目名称、类目状态、类目父节点id、类目序号等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
category_id | bigint | 是 | 类目id | |
parent_id | bigint | 否 | 父节点id | |
category_name | varchar | 50 | 否 | 产品类目名称 |
icon | varchar | 255 | 否 | 类目图标 |
pic | varchar | 255 | 否 | 类目的显示图片 |
seq | int | 否 | 排序 | |
category_status | int | 否 | 默认是1,表示正常状态,0为下线状态 | |
create_time | datetime | 否 | 创建时间 | |
update_tim | datetime | 否 | 更新时间 |
2.商品分组标签表 product_tag
商品分组标签表 product_tag 主要描述了商品分组标签的分组标题、分组状态、分组列表样式(0一列一个商品,1一列二个商品,2一列三个商品)等属性。
分组标签是对商品分类的补充,把一些相似的商品放在一起管理和展示商品,以促进销售和提升用户体验。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
id | bigint | 0 | 是 | 分组标签id |
title | varchar | 100 | 否 | 分组标题 |
seq | int | 否 | 排序 | |
status | tinyint | 0 | 否 | 状态(1为正常,0为删除) |
style | int | 0 | 否 | 列表样式(0:一列展示一个商品;1:一列两个;2:一列三个) |
create_time | timestamp | 0 | 否 | 创建时间 |
update_time | timestamp | 0 | 否 | 更新时间 |
3.商品与分组标签关系表 product_tag_reference
商品与分组标签关系表product_tag_reference主要描述了商品与分组标签关系的分组标签id、商品id、店铺id等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
reference_id | bigint | 0 | 是 | 分组引用id |
shop_id | bigint | 0 | 否 | 店铺id |
tag_id | bigint | 0 | 否 | 标签id |
product_id | bigint | 0 | 否 | 商品id |
status | tinyint | 0 | 否 | 状态(1为正常,0为删除) |
create_time | timestamp | 0 | 否 | 创建时间 |
4.商品属性表product_prop
商品属性表product_prop主要描述了商品属性的属性名称、属性规则、店铺id等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
prop_id | bigint | 0 | 是 | 属性id |
prop_name | varchar | 100 | 否 | 属性名称 |
rule | tinyint | 0 | 否 | productPropRule 1:销售属性(规格); 2:参数属性; |
shop_id | bigint | 0 | 否 | 店铺id |
5.商品属性值表 product_prop_value
商品属性值表product_prop_value主要描述了商品属性值的属性值名称、属性id等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
value_id | bigint | 0 | 是 | 属性值ID |
prop_value | varchar | 100 | 否 | 属性值名称 |
prop_id | bigint | 0 | 否 | 属性ID |
6.商品评论表 product_comm
商品评论表product_comm主要描述了商品评论的商品id、商品名称、评论用户id、评论内容、回复内容、回复状态、IP来源、评论得分、评论图片、是否匿名、评论状态、评论的评价等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
product_comm_id | bigint | 0 | 是 | 评论id |
product_id | bigint | 0 | 否 | 商品ID |
product_name | varchar | 255 | 否 | 商品的名字 |
order_item_id | varchar | 255 | 否 | 订单项ID |
open_id | varchar | 300 | 否 | 评论用户ID |
content | int | 否 | 评论内容 | |
reply_content | int | 0 | 否 | 掌柜回复内容 |
create_time | datetime | 0 | 否 | 记录时间 |
reply_time | datetime | 0 | 否 | 回复时间 |
reply_sts | int | 否 | 是否回复 0:未回复 1:已回复 | |
post_ip | varchar | 16 | 否 | IP来源 |
score | tinyint | 0 | 否 | 得分,0-5分 |
useful_counts | int | 0 | 否 | 有用的计数 |
pics | varchar | 1000 | 否 | 晒图的json字符串 |
is_anonymous | int | 0 | 否 | 是否匿名(1:是 0:否) |
status | int | 0 | 否 | 是否显示,1:为显示,0:待审核, -1:不通过审核,不显示。 如果需要审核评论,则是0,,否则1 |
evaluate | tinyint | 0 | 否 | 评价(0好评 1中评 2差评) |
shop_id | bigint | 0 | 否 | 店铺id |
7.商品表 product
商品类product主要描述了商品的商品名称、店铺id、商品原价、商品现价、商品卖点、商品详细描述、商品主图地址、商品状态、商品所属类目id、商品销量、商品总库存数量、等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
product_id | bigint | 0 | 是 | 商品ID |
product_name | varchar | 300 | 否 | 商品的名字 |
shop_id | bigint | 0 | 否 | 店铺ID |
ori_price | decimal | 15 | 否 | 原价 |
price | decimal | 15 | 否 | 现价 |
brief | varchar | 500 | 否 | 简要描述,卖点等 |
content | text | 0 | 否 | 详细描述 |
pic | varchar | 255 | 否 | 商品主图 |
imgs | varchar | 1000 | 否 | 商品图片,多个图片以,分割 |
product_status | int | 0 | 否 | 默认是1,表示正常状态, -1表示删除, 0下架 |
category_id | bigint | 0 | 否 | 商品所属类目id |
sold_num | int | 0 | 否 | 销量 |
total_stocks | int | 0 | 否 | 总库存 |
delivery_mode | json | 0 | 否 | 配送模式 |
delivery_template_id | bigint | 0 | 否 | 运费模板id |
create_time | timestamp | 0 | 否 | 录入时间 |
update_time | timestamp | 0 | 否 | 修改时间 |
putaway_time | timestamp | 0 | 否 | 上架时间 |
version | int | 0 | 否 | 版本 乐观锁 |
8.商品sku表
Spu(product表):华为 Mate60Pro
sku(sku表):华为 Mate60Pro,颜色,白色,型号:16G+1T
商品sku表主要描述了商品sku的商品id、商品sku的属性、商品sku原价、商品sku现价、商品sku实际库存数量、商品sku图片地址、商品sku名称、商品名称、等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
sku_id | bigint | 0 | 是 | 单品ID |
product_id | bigint | 0 | 否 | 商品ID |
properties | varchar | 2000 | 否 | 销售属性组合字符串,格式是p1:v1;p2:v2 |
ori_price | decimal | 15 | 否 | 原价 |
price | decimal | 15 | 否 | 现价 |
stocks | int | 500 | 否 | 商品在付款减库存的状态下,该sku上未付款的订单数量 |
actual_stocks | int | 0 | 否 | 实际库存 |
pic | varchar | 500 | 否 | sku图片 |
sku_name | varchar | 120 | 否 | sku名称 |
product_name | varchar | 255 | 否 | 商品名称 |
model_id | varchar | 100 | 否 | 商品条形码 |
weight | double | 0 | 否 | 商品重量 |
volume | double | 0 | 否 | 商品体积 |
sku_status | tinyint | 0 | 否 | 0 禁用 1 启用 |
delivery_template_id | bigint | 0 | 否 | 运费模板id |
create_time | timestamp | 0 | 否 | 录入时间 |
update_time | timestamp | 0 | 否 | 修改时间 |
version | int | 0 | 否 | 版本 乐观锁 |
商品表product和商品sku表中的version版本号字段是乐观锁中的版本号机制。而版本号机制是解决数据冲突的一种方案。
版本号机制一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数。当数据被修改时,version值会加1。
当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。
4.门店业务表结构
门店业务表包括:公告表、轮播图表、地区表。
下面详细描述以上三张表的结构。
1.公告表notice
公告表notice主要描述了公告的公告标题、公告内容、公告状态、是否置顶等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
id | bigint | 0 | 是 | 公告id |
shop_id | bigint | 0 | 否 | 店铺id |
title | varchar | 100 | 否 | 公告标题 |
content | text | 15 | 否 | 公告内容 |
status | tinyint | 1 | 否 | 状态(1:公布 0:撤回) |
is_top | tinyint | 500 | 否 | 是否置顶:1置顶,0不置顶 |
create_time | timestamp | 0 | 否 | 录入时间 |
update_time | timestamp | 0 | 否 | 修改时间 |
2.轮播图表 index_img
轮播图表index_img主要描述了轮播图的图片地址、图片状态、店铺id等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
img_id | bigint | 0 | 是 | 轮播图id |
shop_id | bigint | 0 | 否 | 店铺id |
img_url | varchar | 200 | 否 | 图片 |
des | varchar | 200 | 否 | 说明文字,描述 |
title | varchar | 200 | 否 | 标题 |
link | varchar | 200 | 否 | 链接 |
status | tinyint | 1 | 否 | 状态:默认1显示,0不显示 |
seq | int | 0 | 否 | 顺序 |
create_time | timestamp | 0 | 否 | 录入时间 |
update_time | timestamp | 0 | 否 | 修改时间 |
3.地址表area
地区表area主要描述了地区的地区名称、地区父节点id、地区级别等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
area_id | bigint | 0 | 是 | 地区id |
area_name | varchar | 100 | 否 | 地区名称 |
parent_id | bigint | 0 | 否 | 地区父节点id |
level | Int | 0 | 否 | 级别 |
5.会员业务表结构
会员业务表包括:会员用户表、会员用户收藏记录表、会员用户收货地址表。
下面详细描述以上三张表的结构。
1.会员用户表member
会员用户表member主要描述了会员用户的微信openid、会员昵称、会员头像地址、注册时间等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
id | bigint | 0 | 是 | 会员表的主键 |
open_id | varchar | 36 | 否 | 微信openid |
nick_name | varchar | 50 | 否 | 用户昵称 |
real_name | varchar | 50 | 否 | 真实姓名 |
user_mail | varchar | 100 | 否 | 用户邮箱 |
pay_password | varchar | 50 | 否 | 支付密码 |
user_mobile | varchar | 50 | 否 | 手机号码 |
create_time | datetime | 0 | 否 | 注册时间 |
update_time | datetime | 0 | 否 | 修改时间 |
user_regip | varchar | 50 | 否 | 注册IP |
user_lasttime | datetime | 0 | 否 | 最后登录时间 |
user_lastip | varchar | 0 | 否 | 最后登录IP |
sex | char | 1 | 否 | M(男) or F(女) |
birth_date | char | 10 | 否 | 例如:2009-11-27 |
pic | varchar | 255 | 否 | 头像图片路径 |
status | int | 0 | 否 | 状态 1 正常 0 无效 |
score | int | 0 | 否 | 用户积分 |
2.会员用户收藏记录表 member_collection
会员收藏记录表member_collection主要描述了会员收藏记录的会员用户id、收藏商品id、收藏时间等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
id | bigint | 0 | 是 | 会员表的主键 |
open_id | varchar | 36 | 否 | 会员用户id |
prod_id | varchar | 50 | 否 | 商品id |
create_time | datetime | 50 | 否 | 收藏时间 |
3.会员收货地址表member_addr
会员收货地址表member_addr主要描述了会员收货地址的会员用户id、收货人姓名、省id、省名称、市id、市名称、区id、区名称、收货详细地址、收货人手机号码、是否默认收货地址等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
addr_id | bigint | 0 | 是 | 收货地址id |
open_id | varchar | 36 | 否 | 会员用户id |
receiver | varchar | 50 | 否 | 收货人姓名 |
province_id | bigint | 0 | 否 | 省id |
province | varchar | 100 | 否 | 省名称 |
city | varchar | 20 | 否 | 市名称 |
city_id | bigint | 0 | 否 | 市id |
area | varchar | 20 | 否 | 区名称 |
area_id | bigint | 0 | 否 | 区id |
post_code | varchar | 15 | 否 | 邮编 |
addr | varchar | 1000 | 否 | 收货详细地址 |
mobile | varchar | 20 | 否 | 收货人手机号码 |
status | int | 0 | 否 | 收货地址状态 |
common_addr | int | 0 | 否 | 1默认收货地址,0非默认 |
create_time | datetime | 0 | 否 | 创建时间 |
update_time | datetime | 0 | 否 | 修改时间 |
6.购物车业务表结构
购物车业务表包括:购物车表。
购物车表basket主要描述了购物车的商品id、商品skuId、会员用户id、商品数量等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
basket_id | bigint | 0 | 是 | 会员表的主键 |
shop_id | bigint | 0 | 否 | 店铺id |
prod_id | bigint | 0 | 否 | 产品id |
sku_id | bigint | 0 | 否 | 商品skuId |
open_id | varchar | 50 | 否 | 会员用户id |
prod_count | int | 0 | 否 | 商品数量 |
create_time | timestamp | 0 | 否 | 购物时间 |
7.订单业务表结构
订单业务表包括:订单表、订单商品条目表。
下面详细描述以上两张表的结构。
1.订单表 order
订单表order主要描述了订单记录的订单编号、订单总值、实际总值、订单备注、订单状态、订单运费、订单收货地址id、订单商品总数量、订购时间、订单支付状态、订单关闭类型等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
order_id | bigint | 0 | 是 | 订单ID |
open_id | varchar | 36 | 否 | 订购用户ID |
order_number | varchar | 64 | 否 | 订单编号 |
total_money | decimal | 15 | 否 | 总值 |
actual_total | decimal | 15 | 否 | 实际总值 |
remarks | varchar | 1024 | 否 | 订单备注 |
status | int | 0 | 否 | 订单状态 1:待付款 2:待发货 3:待收货 4:待评价 5:成功 6:失败 |
dvy_type | varchar | 10 | 否 | 配送类型 |
dvy_id | bigint | 0 | 否 | 配送方式ID |
dvy_flow_id | varchar | 100 | 否 | 物流单号 |
freight_amount | decimal | 15 | 否 | 订单运费 |
addr_order_id | bigint | 0 | 否 | 用户订单地址Id |
product_nums | int | 0 | 否 | 订单商品总数 |
create_time | timestamp | 0 | 否 | 订购时间 |
update_time | timestamp | 0 | 否 | 订单更新时间 |
pay_time | timestamp | 0 | 否 | 付款时间 |
dvy_time | timestamp | 0 | 否 | 发货时间 |
finally_time | timestamp | 0 | 否 | 完成时间 |
cancel_time | timestamp | 0 | 否 | 取消时间 |
is_payed | tinyint | 1 | 否 | 是否已经支付,1:已经支付过,0:,没有支付过 |
delete_status | int | 0 | 否 | 用户订单删除状态,0:没有删除,1:回收站, 2:永久删除 |
refund_sts | int | 0 | 否 | 0:默认,1:在处理,2:处理完成 |
reduce_amount | decimal | 15 | 否 | 优惠总额 |
close_type | tinyint | 0 | 否 | 订单关闭原因 1-超时未支付 2-退款关闭 4-买家取消 15-已通过货到付款交易 |
2.订单商品条目表 order_item
订单商品条目表order_item主要描述了购物车中商品条目对象的店铺id、订单编号、商品id、商品skuId、购买商品数量、商品名称、商品sku名称、商品图片地址、商品单价、商品总金额、购物时间、评论状态等属性。
字段名 | 类型 | 长度 | 是否为主键 | 说明 |
---|---|---|---|---|
order_item_id | bigint | 0 | 是 | 订单项ID |
shop_id | bigint | 36 | 否 | 店铺id |
order_number | varchar | 64 | 否 | 订单编号 |
prod_id | bigint | 15 | 否 | 产品ID |
sku_id | bigint | 15 | 否 | 产品SkuID |
prod_count | int | 10 | 否 | 购物车产品个数 |
prod_name | varchar | 0 | 否 | 产品名称 |
sku_name | varchar | 10 | 否 | sku名称 |
pic | varchar | 0 | 否 | 产品主图片路径 |
price | decimal | 100 | 否 | 产品价格 |
product_total_amount | decimal | 15 | 否 | 单个商品总金额 |
create_time | timestamp | 0 | 否 | 购物时间 |
comm_sts | int | 0 | 否 | 评论状态: 0 未评价 1 已评价 |
评论区