动力商城项目概述和数据库设计(一)

动力商城(基于SpringCloud分布式框架)

第一章 动力商城

1.1 项目功能概述

​ 本商城系统分为后台管理系统和微信小程序两个终端,后台管理系统主要是对商城业务的支撑,核心功能包括系统管理、产品管理、类目管理、商品属性管理、商品分组标签管理、公告管理、轮播图管理、地址管理。微信小程序端的核心功能包括首页展示、商品分类展示、商品详情页面、购物车页面。

1.1.1 项目所使用的相关技术

后台系统管理页面前端:Vue+ElementUI

微信小程序商城用户界面:微信小程序

后端:SSM、MP、SpringCloud、阿里云(对象存储OSS、短信服务)、Hutools、EasyExcel、Spring Secourity、redis、MySQL

1.1.2 角色说明

本项目的使用者分为三种,如图所示:

  • 平台运营:动力商城项目系统管理员。
  • 店铺运营:基于平台的店铺管理人员,如:店铺运营人员,店铺管理员。
  • 消费者:基于微信小程序应用的使用者,即在商城平台上购买商品的客户。

在这里插入图片描述

1.2 项目结构

动力商城项目分为三个模块:

  • cloud-iaas基础模块:gateway-server网关模块、auth-server认证授权模块
  • power-business业务功能模块:common-base公共基础模块、common-business公共业务模块
  • power-common功能服务模块:后台管理模块、产品管理模块、门店管理模块、会员管理模块、购物车管理模块、订单管理模块、搜索管理模块
    在这里插入图片描述
1.2.1 power-mall父模块

​ 项目顶级父工程,管理所有项目子模块以及项目所有依赖。 主要通过pom文件中的dependencyManagement标签来管理,通过properties标签来管理依赖的版本号。

1.2.2 cloud-iaas模块

​ cloud-iaas模块属于基础服务设施,主要是管理认证授权服务与网关服务的模块。

​ auth-server模块主要提供认证授权服务,为整个系统提供统一的用户认证和授权管理。该模块主要使用的是Spring Security技术解决企业应用系统的安全访问控制。

​ Spring Security框架提供了一组可以在Spring应用上下文中配置的bean对象,并且充分利用了Spring框架的IoC(控制反转Inversion of Control),DI(依赖注入Dependency Injection)和AOP(面向切面编程)功能,为应用系统提供可靠的声名式的安全访问控制功能,大大减少了企业在系统安全控制上的大量重复代码工作。

​ gateway-server模块主要提供验证请求合法性的功能,该模块主要使用的是Spring Cloud Gateway技术为动力商城项目提供一种简单而有效的统一的API路由管理方式

1.2.3 power-common模块
  1. common-base

    ​ common-base模块主要是提供整个项目需要的常量类、统一响应对象、统一业务状态码。

  2. common-core

    公共核心:存放业务模块中公共内容,如:MyBatis-Plus分页、Redis值的序列化、资源服务的配置、Swagger配置、全局异常处理、token的解析。

1.2.4 power-business模块
  1. manager-servcie

    后台管理业务模块:实现系统基础服务功能,如:管理员管理、角色管理、权限管理。

  2. product-service

    商品服务业务模块:实现跟商品相关的功能,如:商品类目管理、商品分组标签管理、商品属性管理、商品评论管理、产品管理。

  3. store-service

    门店服务业务模块:实现与门店相关的功能,如:地址管理、公告管理、轮播图管理。

  4. sreach-service

    搜索服务业务模块:提供搜索业务功能。

  5. member-service

    会员服务业务模块:实现与会员相关的业务功能,如:用户收货地址管理、用户收藏记录管理、绑定手机号码等。

  6. cart-service

    购物车业务模块:实现购物车业务功能,如:查询用户购物车商品、添加商品到购物车、修改购物车中商品数量、计算用户购物车中商品数量。

  7. order-service

    订单业务模块:实现订单业务功能,如:用户下单、查询用户订单列表。

1.3 项目设计

1.3.1 系统开发以及运行环境
  • 开发系统:win
  • 项目服务系统:Linux
  • Java开发包:JDK8
  • 项目管理工具:Maven 3.8.5
  • 项目开发工具:idea、微信开发者工具
  • 数据库:Mysql 8.0.32
  • 缓存管理工具:redis 7.0.11
  • 版本控制工具:git
1.3.2 环境搭建(略过)

1.4 数据库设计

本系统实现的主要功能是商城后台管理系统和移动端微信小程序相关的业务,同时还会涉及安全管理的用户登录和访问控制,因此本系统业务所需要的数据库表可以为六部分:系统业务相关表、商品业务相关表、门店业务相关表、会员业务相关表、购物车业务相关表、订单业务相关表。本系统整体数据库表关系如图11-3所示。

表与表之间的关系:

一对一

一对多:多的表维护两张表之间的关系

多对多:通过第三张关系表来维护两张表之间的关系

实际工作中表与表之间的关系会通过字段进行关联,但是我们不会添加外键约束

在这里插入图片描述

在这里插入图片描述

1.4.1 系统业务表结构

​ 系统业务表包括:系统用户表、系统角色表、系统权限表、系统用户与角色关系表、系统角色与权限关系表。该业务所涉及的上述5张表的关系

在这里插入图片描述

权限设计模型:以下五张表是基于角色的权限控制访问系统:RBAC0

RBAC0。用户和角色是多对多,角色和权限是多对多。一个用户拥有的权限,是他所有角色的集合。

(1) 系统用户表sys_user

系统用户表sys_user主要描述了后台管理系统用户的用户名、密码、email、status等属性。如表11-1所示。

表11-1 系统用户表sys_user

字段名类型长度是否为主键说明
user_idbigint0用户id
usernamevarchar50用户名
passwordvarchar100登录密码(加密后的密码)
emailvarchar100邮箱
mobilevarchar100手机号码
statusTinyint0用户状态:0禁用,1正常
create_user_idbigint0创建者id
create_timedatetime0创建时间
shop_idbigint0店铺id
(2) 系统角色表sys_role

系统角色表sys_role主要描述了后台管理系统角色的角色名称、角色备注等属性。如表11-2所示。

表11-2 系统角色表 sys_role

字段名类型长度是否为主键说明
role_idbigint0角色id
role_namevarchar100角色名称
remarkvarchar100备注
create_user_idbigint0创建者id
create_timedatetime0创建时间
(3) 系统权限表 sys_menu

系统权限表sys_menu主要描述了后台管理系统权限的菜单父id、菜单名称、菜单URL、菜单权限、菜单类型(0表示目录,1表示菜单,2表示按键)、菜单序号等属性。如表11-3所示。

表11-3 系统权限表sys_menu

字段名类型长度是否为主键说明
menu_idbigint0权限id
parent_idbigint0父菜单ID,一级菜单为0
namevarchar50菜单名称
urlvarchar200菜单URL
permsvarchar500授权(多个用逗号分隔,如:user:list,user:create)
typeint0类型:0目录、1菜单、2按钮
iconvarchar50菜单图标
order_numint0排序
(4) 系统用户与角色关系表 sys_user_role

系统用户与角色关系表sys_user_role主要描述了后台管理系统用户与角色的关系,表中属性包含用户id、角色id。如表11-4所示。

表11-4 系统用户与角色关系表sys_user_role

字段名类型长度是否为主键说明
idbigint0标识
user_idbigint0用户id
role_idbigint0角色id
(5) 系统角色与权限关系表 sys_role_menu

系统角色与权限关系表sys_role_menu主要描述了后台管理系统角色与权限关系,属性包含权限id、角色id。如表11-5所示。

表11-5 系统角色与权限关系表sys_role_menu

字段名类型长度是否为主键说明
idbigint0标识
menu_idbigint0权限id
role_idbigint0角色id

表11-1~表11-5展示了商城后台管理系统相关表的结构设计,在实际开发中,读者可以根据需要自行扩展。需要注意的是,系统相关的表涉及项目整合Spring Security进行安全管理控制;同时系统用户表中的password字段赋值时,必须为加密后的密文(教材中使用的是BCryptPasswordEncoder加密方式)。

1.4.1 商品业务表结构

商品业务表包括:商品类目表、商品分组标签表、商品与分组标签关系表、商品属性表、商品属性值表、商品评论表、商品表、商品sku表。该业务所涉及的上述8张表的关系如下图11-5所示。

在这里插入图片描述

图11-5 商品业务表关系示意图

​ 下面详细描述以上八张表的结构。

(1)商品类目表 category

商品类目与商品的的关系是:一对多

商品类目表category主要描述了商品类目的类目名称、类目状态、类目父节点id、类目序号等属性。如表11-6所示。

表11-6 商品类目表category

字段名类型长度是否为主键说明
category_idbigint0类目id
parent_idbigint0父节点id
category_namevarchar50产品类目名称
iconvarchar255类目图标
picvarchar300类目的显示图片
seqint排序
statusint0默认是1,表示正常状态,0为下线状态
create_timedatetime0创建时间
update_timdatetime0更新时间
(2) 商品分组标签表 prod_tag

商品分组标签表prod_tag主要描述了商品分组标签的分组标题、分组状态、分组列表样式(0一列一个商品,1一列二个商品,2一列三个商品)等属性。如表11-7所示。

表11-7 商品分组标签表 prod_tag

字段名类型长度是否为主键说明
idbigint0分组标签id
titlevarchar100分组标题
seqint排序
statustinyint0状态(1为正常,0为删除)
styleint0列表样式(0:一列一个,1:一列两个,2:一列三个)
create_timetimestamp0创建时间
update_timetimestamp0更新时间
(3) 商品与分组标签关系表 prod_tag_reference

商品与分组标签的关系是:多对多

商品与分组标签关系表prod_tag_reference主要描述了商品与分组标签关系的分组标签id、商品id、店铺id等属性。如表11-8所示。

表11-8 商品与分组标签关系表prod_tag_reference

字段名类型长度是否为主键说明
reference_idbigint0分组引用id
shop_idbigint0店铺id
tag_idbigint0标签id
prod_idbigint0商品id
statustinyint0状态(1为正常,0为删除)
create_timetimestamp0创建时间
(4) 商品属性表 prod_prop

商品属性表prod_prop主要描述了商品属性的属性名称、属性规则、店铺id等属性。如表11-9所示。

表11-9 商品属性表prod_prop

字段名类型长度是否为主键说明
prop_idbigint0属性id
prop_namevarchar100属性名称
ruletinyint0ProdPropRule 1:销售属性(规格); 2:参数属性;
shop_idbigint0店铺id
(5) 商品属性值表 prod_prop_value

商品属性值表prod_prop_value主要描述了商品属性值的属性值名称、属性id等属性。如表11-10所示。

表11-10 商品属性值表prod_prop_value

字段名类型长度是否为主键说明
value_idbigint0属性值ID
prop_valuevarchar100属性值名称
prop_idbigint0属性ID
(6) 商品评论表 prod_comm

商品评论表prod_comm主要描述了商品评论的商品id、商品名称、评论用户id、评论内容、回复内容、回复状态、IP来源、评论得分、评论图片、是否匿名、评论状态、评论的评价等属性。如表11-11所示。

表11-11 商品评论表prod_comm

字段名类型长度是否为主键说明
prod_comm_idbigint0评论id
prod_idbigint0商品ID
prod_namevarchar255商品的名字
order_item_idvarchar255订单项ID
open_idvarchar300评论用户ID
contentint评论内容
reply_contentint0掌柜回复内容
create_timedatetime0记录时间
reply_timedatetime0回复时间
reply_stsint是否回复 0:未回复 1:已回复
postipvarchar16IP来源
scoretinyint0得分,0-5分
useful_countsint0有用的计数
picsvarchar1000晒图的json字符串
is_anonymousint0是否匿名(1:是 0:否)
statusint0是否显示,1:为显示,0:待审核, -1:不通过审核,不显示。 如果需要审核评论,则是0,,否则1
evaluatetinyint0评价(0好评 1中评 2差评)
shop_idbigint0店铺id
(7) 商品表 prod

商品类prod主要描述了商品的商品名称、店铺id、商品原价、商品现价、商品卖点、商品详细描述、商品主图地址、商品状态、商品所属类目id、商品销量、商品总库存数量、等属性。如表11-12所示。

表11-12 商品表prod

字段名类型长度是否为主键说明
prod_idbigint0商品ID
prod_namevarchar300商品的名字
shop_idbigint0店铺ID
ori_pricedecimal15原价
pricedecimal15现价
briefvarchar500简要描述,卖点等
contenttext0详细描述
picvarchar255商品主图
imgsvarchar1000商品图片,多个图片以,分割
statusint0默认是1,表示正常状态, -1表示删除, 0下架
category_idbigint0商品所属类目id
sold_numint0销量
total_stocksint0总库存
delivery_modejson0配送模式
delivery_template_idbigint0运费模板id
create_timetimestamp0录入时间
update_timetimestamp0修改时间
putaway_timetimestamp0上架时间
versionint0版本 乐观锁
(8) 商品sku表

Spu(prod表):华为Mate60Pro sku(sku表) -> 颜色:白色 版本:16G+1T

商品sku表主要描述了商品sku的商品id、商品sku的属性、商品sku原价、商品sku现价、商品sku实际库存数量、商品sku图片地址、商品sku名称、商品名称、等属性。如表11-13所示。

表11-13 商品sku表

字段名类型长度是否为主键说明
sku_idbigint0单品ID
prod_idbigint0商品ID
propertiesvarchar2000销售属性组合字符串,格式是p1:v1;p2:v2
ori_pricedecimal15原价
pricedecimal15现价
stocksint500商品在付款减库存的状态下,该sku上未付款的订单数量
actual_stocksint0实际库存
picvarchar500sku图片
sku_namevarchar120sku名称
prod_namevarchar255商品名称
model_idvarchar100商品条形码
weightdouble0商品重量
volumedouble0商品体积
statustinyint00 禁用 1 启用
delivery_template_idbigint0运费模板id
create_timetimestamp0录入时间
update_timetimestamp0修改时间
versionint0版本 乐观锁

表11-12商品表prod和表11-13商品sku表中的version版本号字段是乐观锁中的版本号机制。而版本号机制是解决数据冲突的一种方案。

版本号机制一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数。当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。

1.4.2 门店业务表结构

门店业务表包括:公告表、轮播图表、地区表。

下面详细描述以上三张表的结构。

(1) 公告表notice

公告表notice主要描述了公告的公告标题、公告内容、公告状态、是否置顶等属性。如表11-14所示。

表11-14 公告表

字段名类型长度是否为主键说明
idbigint0公告id
shop_idbigint0店铺id
titlevarchar100公告标题
contenttext15公告内容
statustinyint1状态(1:公布 0:撤回)
is_toptinyint500是否置顶:1置顶,0不置顶
create_timetimestamp0录入时间
update_timetimestamp0修改时间
(2)轮播图表 index_img

轮播图表index_img主要描述了轮播图的图片地址、图片状态、店铺id等属性。如表11-15所示。

表11-15 轮播图表

字段名类型长度是否为主键说明
img_idbigint0轮播图id
shop_idbigint0店铺id
img_urlvarchar200图片
desvarchar200说明文字,描述
titlevarchar200标题
linkvarchar200链接
statustinyint1状态:默认1显示,0不显示
seqint0顺序
create_timetimestamp0录入时间
update_timetimestamp0修改时间
(3) 地址表 area

地区表area主要描述了地区的地区名称、地区父节点id、地区级别等属性。如表11-16所示。

表11-16 地区表

字段名类型长度是否为主键说明
area_idbigint0地区id
area_namevarchar100地区名称
parent_idbigint0地区父节点id
levelInt0级别
1.4.3 会员业务表结构

会员业务表包括:会员用户表、会员用户收藏记录表、会员用户收货地址表。该业务所涉及的上述3张表的关系如下图11-6所示。

在这里插入图片描述

图11-6 会员业务表关系示意图

下面详细描述以上三张表的结构。

(1) 会员用户表 member

会员用户表member主要描述了会员用户的微信openid、会员昵称、会员头像地址、注册时间等属性。如表11-17所示。

表11-17 会员用户表member

字段名类型长度是否为主键说明
idbigint0会员表的主键
open_idvarchar36微信openid
nick_namevarchar50用户昵称
real_namevarchar50真实姓名
user_mailvarchar100用户邮箱
pay_passwordvarchar50支付密码
user_mobilevarchar50手机号码
create_timedatetime0注册时间
update_timedatetime0修改时间
user_regipvarchar50注册IP
user_lasttimedatetime0最后登录时间
user_lastipvarchar0最后登录IP
sexchar1M(男) or F(女)
birth_datechar10例如:2009-11-27
picvarchar255头像图片路径
statusint0状态 1 正常 0 无效
scoreint0用户积分
(2) 会员用户收藏记录表 member_collection

会员收藏记录表member_collection主要描述了会员收藏记录的会员用户id、收藏商品id、收藏时间等属性。如表11-18所示。

表11-18 会员用户收藏记录表member_collection

字段名类型长度是否为主键说明
idbigint0会员表的主键
open_idvarchar36会员用户id
prod_idvarchar50商品id
create_timedatetime50收藏时间
(3) 会员收货地址表 member_addr

会员收货地址表member_addr主要描述了会员收货地址的会员用户id、收货人姓名、省id、省名称、市id、市名称、区id、区名称、收货详细地址、收货人手机号码、是否默认收货地址等属性。如表11-19所示。

表11-19 会员用户收货地址表member_addr

字段名类型长度是否为主键说明
addr_idbigint0收货地址id
open_idvarchar36会员用户id
receivervarchar50收货人姓名
province_idbigint0省id
provincevarchar100省名称
cityvarchar20市名称
city_idbigint0市id
areavarchar20区名称
area_idbigint0区id
post_codevarchar15邮编
addrvarchar1000收货详细地址
mobilevarchar20收货人手机号码
statusint0收货地址状态
common_addrint01默认收货地址,0非默认
create_timedatetime0创建时间
update_timedatetime0修改时间
1.4.4 购物车业务表结构

购物车业务表包括:购物车表。

(1) 购物车表

购物车表basket主要描述了购物车的商品id、商品skuId、会员用户id、商品数量等属性。如表11-20所示。

表11-20 购物车表basket

字段名类型长度是否为主键说明
basket_idbigint0会员表的主键
shop_idbigint0店铺id
prod_idbigint0产品id
sku_idbigint0商品skuId
open_idvarchar50会员用户id
prod_countint0商品数量
create_timetimestamp0购物时间
1.4.5 订单业务表结构

订单业务表包括:订单表、订单商品条目表。

在这里插入图片描述

图11-7 订单业务表关系示意图

下面详细描述以上两张表的结构。

(1) 订单表 order

订单表order主要描述了订单记录的订单编号、订单总值、实际总值、订单备注、订单状态、订单运费、订单收货地址id、订单商品总数量、订购时间、订单支付状态、订单关闭类型等属性。如表11-20所示。

表11-20 订单表order

字段名类型长度是否为主键说明
order_idbigint0订单ID
open_idvarchar36订购用户ID
order_numbervarchar64订单编号
total_moneydecimal15总值
actual_totaldecimal15实际总值
remarksvarchar1024订单备注
statusint0订单状态 1:待付款 2:待发货 3:待收货 4:待评价 5:成功 6:失败
dvy_typevarchar10配送类型
dvy_idbigint0配送方式ID
dvy_flow_idvarchar100物流单号
freight_amountdecimal15订单运费
addr_order_idbigint0用户订单地址Id
product_numsint0订单商品总数
create_timetimestamp0订购时间
update_timetimestamp0订单更新时间
pay_timetimestamp0付款时间
dvy_timetimestamp0发货时间
finally_timetimestamp0完成时间
cancel_timetimestamp0取消时间
is_payedtinyint1是否已经支付,1:已经支付过,0:,没有支付过
delete_statusint0用户订单删除状态,0:没有删除, 1:回收站, 2:永久删除
refund_stsint00:默认,1:在处理,2:处理完成
reduce_amountdecimal15优惠总额
close_typetinyint0订单关闭原因 1-超时未支付 2-退款关闭 4-买家取消 15-已通过货到付款交易
(2) 订单商品条目表 order_item

订单商品条目表order_item主要描述了购物车中商品条目对象的店铺id、订单编号、商品id、商品skuId、购买商品数量、商品名称、商品sku名称、商品图片地址、商品单价、商品总金额、购物时间、评论状态等属性。如表11-21所示。

表11-21 订单商品条目表order_item

字段名类型长度是否为主键说明
order_item_idbigint0订单项ID
shop_idbigint36店铺id
order_numbervarchar64订单编号
prod_idbigint15产品ID
sku_idbigint15产品SkuID
prod_countint10购物车产品个数
prod_namevarchar0产品名称
sku_namevarchar10sku名称
picvarchar0产品主图片路径
pricedecimal100产品价格
product_total_amountdecimal15单个商品总金额
create_timetimestamp0购物时间
comm_stsint0评论状态: 0 未评价 1 已评价
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值