Hi,大家好,我是姜友华。
今天,我将进行一套商城系统的Mysql数据库设计。需要注意的是,数据库暂时不支持商铺。
一、大约说一下。
像商城类的数据库,初期的难点在于树状结构表(树状表)的缺的。Mysql8.0出来后这个难点就没有了。
表的分类。
我把数据表对应着数据逻辑的分类分为四类:集合表、线性表、树形表、关联表(图形)。
- 集合表:集合只保存同类的独立的各项目信息。集合表有一种特殊的情况是所保存的只有项目名称,我称这种集合表为枚举表。集合表同时有可能因为项目信息过多被纵向分表,我称他们为主体表与拓展表,主体表有项目名,拓展表引用主体表的项目ID。
- 线性表:表达线性关系数据。
- 树状表:单表内实现无限分级功能。以前有好几种表达方式,这里只使用
id name parent_id
这一种形式。 - 关联表:表达一对多关系,大部分关联表使用的是ID对应ID。
表设计的约定。
- 固定列。
阿里巴巴《Java开发手册(嵩山版)》里,所以表都有3个固定的列。我的设计上一般有4列,多了一个state
,表达是否可用,相当于回收站
,用来减少删除数据的风险。这4列的SQL语句如下:
CREATE TABLE sample
(
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
- 使用按位或
|
表达多项选择。
为了减少关联表的使用,我们表达一对多关系时会用到使用按位。即使用2的N次方来表达选项(如权限),关联时保存多个选项的和。
- 优点:省去了关联表,也意味着省去了多表关联查询。
- 缺点:选项不能过多,比如使用
BIGINT
,也不能超过64个选项。
- 最后,我们的货币单位是1*10^-5元,使用
BIGINT(20)
类型。
好,我们暂定本案的数库名为:demo_shop
,开始吧。
二、数据表设计说明。
1. 用户角色与权限。
首先,每个页面只有一个角色有权限进行访问与操作;其次,每个用户可以同时拥有多个角色;最后,角色之间为并列关系,没有上下级继承。
- 通过
page_info
表管理角色,对页面的访问权限。每URL只对应一个角色,一个角色可对应多个URL。URL支持通配符,未加入该表的URL,对所有用户开放。 - 通过
user_info
表管理用户角色,可为单个用户分配多个角色。多个角色以每个角色的rank
值N,作为2的N次方累加,赋予该用户。 - 通过
role_info
表管理角色,角色的rank
值是权利标识,没有大小之分,并保持唯一性。rank
值的大小为0~63,所以该方案不适合ERP之类。
2. JSON类型字段。
-
user_detail
的info
,使用JSON是因为json用户信息的需求为不可控。 - 其余的为实现快照功能。因为商品信息、收货地址信息随时有改动的可能。
三、数据表。
-- 角色信息表
CREATE TABLE role_info
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(64) COMMENT '角色名称',
`info` VARCHAR(64) COMMENT '角色说明',
`rank` TINYINT(1) UNSIGNED COMMENT '排序,由小到大排序',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_name (`name`),
UNIQUE INDEX unique_rank (`rank`)
) COMMENT '角色信息表';
-- 用户信息表
CREATE TABLE user_info
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`username` VARCHAR(255) COMMENT '用户账号',
`password` VARCHAR(255) COMMENT '密码',
`alias` VARCHAR(255) COMMENT '呢称',
`phone` VARCHAR(25) COMMENT '手机号,登录用',
`email` VARCHAR(255) COMMENT '邮箱',
`role_rank` BIGINT(20) UNSIGNED DEFAULT 0 COMMENT 'role_info.rank, 0最基本权限,多个权限可相加',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_username (`username`),
UNIQUE INDEX unique_phone (`phone`),
UNIQUE INDEX unique_email (`email`)
) COMMENT '用户信息表';
-- 用户详情表
CREATE TABLE user_detail
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`info` JSON COMMENT '用户信息',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX index_user_id (`user_id`)
) COMMENT '用户详情表';
-- 用户动向表
CREATE TABLE user_trend
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`score` INT(10) DEFAULT 0 COMMENT '积分',
`worth` INT(10) DEFAULT 0 COMMENT '权重',
`level` INT(10) DEFAULT 0 COMMENT '层级',
`token` INT(10) DEFAULT 0 COMMENT '代币',
`credit` INT(10) DEFAULT 0 COMMENT '信用',
`browse_times` INT(10) DEFAULT 0 COMMENT '查看次数',
`collect_times` INT(10) DEFAULT 0 COMMENT '收藏次数',
`intention_times` INT(10) DEFAULT 0 COMMENT '添加购物车次数',
`buy_times` INT(10) DEFAULT 0 COMMENT '购买次数',
`pay_total` INT(10) DEFAULT 0 COMMENT '消费总额',
`savings_total` INT(10) DEFAULT 0 COMMENT '节省总额',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`)
) COMMENT '用户动向表';
-- 用户地址表
CREATE TABLE user_address
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`person` VARCHAR(255) COMMENT '联系人',
`phone` VARCHAR(24) COMMENT '联系电话',
`address` VARCHAR(255) COMMENT '地址',
`code` INT COMMENT '邮编',
`default` TINYINT(1) DEFAULT 0 COMMENT '是否为默认地址',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`)
) COMMENT '用户地址表';
-- 商品分类表
CREATE TABLE goods_category
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`parent_id` BIGINT(20) UNSIGNED COMMENT 'self.id',
`name` VARCHAR(64) COMMENT '商品分类名称',
`rank` BIGINT(20) UNSIGNED COMMENT '排序,由小到大排序',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
FOREIGN KEY (`parent_id`) REFERENCES goods_category (`id`)
) COMMENT '商品分类表';
-- 商品信息表
CREATE TABLE goods_info
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`category_id` BIGINT(20) UNSIGNED COMMENT 'goods_category.id',
`name` VARCHAR(255) COMMENT '商品名称',
`info` VARCHAR(255) COMMENT '商品特点',
`tags` VARCHAR(255) COMMENT '商品标签, 多个逗号分割',
`price` BIGINT(20) UNSIGNED DEFAULT 0 COMMENT '起售价',
`rank` BIGINT(20) UNSIGNED COMMENT '排序,由小到大排序',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_goods_id (category_id),
INDEX index_tags (tags)
) COMMENT '商品信息表';
-- 规格分类表
CREATE TABLE attribute_group
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(255) COMMENT '规格类别或规格名称',
`parent_id` BIGINT(20) UNSIGNED COMMENT 'self.id',
`rank` BIGINT(20) UNSIGNED COMMENT '排序,由小到大排序',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
FOREIGN KEY (`parent_id`) REFERENCES attribute_group (`id`)
) COMMENT '规格分类表';
-- 商品价格表
CREATE TABLE goods_price
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`goods_id` BIGINT(20) UNSIGNED COMMENT 'goods_info.id',
`attribute_id1` BIGINT(20) UNSIGNED COMMENT 'goods_attribute.id',
`attribute_id2` BIGINT(20) UNSIGNED COMMENT 'goods_attribute.id',
`attribute_id3` BIGINT(20) UNSIGNED COMMENT 'goods_attribute.id',
`rank` BIGINT(20) UNSIGNED COMMENT '排序,由小到大排序',
`price` BIGINT(20) UNSIGNED DEFAULT 0 COMMENT '销售价格',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_sku (`goods_id`, `attribute_id1`, `attribute_id2`, `attribute_id3`)
) COMMENT '商品价格表';
-- 商品详情表
CREATE TABLE goods_detail
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`goods_id` BIGINT(20) UNSIGNED COMMENT 'goods_info.id',
`attribute_url` VARCHAR(255) COMMENT '规格URL',
`introduce_url` VARCHAR(255) COMMENT '介绍URL',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_goods_id (`goods_id`)
) COMMENT '商品详情表';
-- 支付帐户表
CREATE TABLE pay_account
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) UNSIGNED COMMENT 'user_info.id',
`channel` VARCHAR(255) COMMENT '支付平台与银行',
`payer_bank` VARCHAR(255) COMMENT '开户行',
`classify` TINYINT(1) COMMENT '账户类型',
`account` VARCHAR(64) COMMENT '账号的编码(卡号)',
`username` VARCHAR(64) COMMENT '账号的所有者(持卡者)',
`password` VARCHAR(64) COMMENT '账号的所有者(持卡者)的支付密码',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`)
) COMMENT '支付帐户表';
-- 优惠劵信息表
CREATE TABLE coupon_info
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`category_id` VARCHAR(1020) COMMENT 'goods_category.id, NULL为全场可用',
`name` VARCHAR(255) COMMENT '优惠卷名称',
`info` VARCHAR(255) COMMENT '优惠卷信息',
`threshold` BIGINT(20) DEFAULT 0 COMMENT '满减的阈值, 为0时为立减券',
`amount` BIGINT(20) DEFAULT 0 COMMENT '所减金额或折扣',
`classify` TINYINT(1) DEFAULT 0 COMMENT '优惠劵类型,0抵减,1打折',
`start_title` DATETIME COMMENT '有效时间,起',
`end_title` DATETIME COMMENT '有效时间,止',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) COMMENT '优惠劵信息表';
-- 用户优惠卷表
CREATE TABLE user_coupon
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`coupon_id` BIGINT(20) COMMENT 'coupon_id.id',
`used` TINYINT(1) DEFAULT 0 COMMENT '是否已使用',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`)
) COMMENT '用户优惠卷表';
-- 用户订单表
CREATE TABLE order_info
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`address_info` JSON COMMENT 'user_address的快照',
`order_number` VARCHAR(255) COMMENT '订单号',
`order_amount` BIGINT(20) DEFAULT 0 COMMENT '订单金额',
`pay_amount` BIGINT(20) DEFAULT 0 COMMENT '支付金额',
`order_state` TINYINT(3) DEFAULT 1 COMMENT '订单状态,0已取消,1进行中,2已支付',
`send_time` DATETIME COMMENT '预约送货时间',
`remark` VARCHAR(255) COMMENT '附言',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`),
INDEX index_order_number (`order_number`)
) COMMENT '用户订单表';
-- 订单明细表
CREATE TABLE order_item
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`order_id` BIGINT(20) COMMENT 'order_info.id',
`user_id` BIGINT(20) COMMENT 'user_info.id,冗余',
`goods_id` BIGINT(20) COMMENT 'goods_info.id,冗余',
`order_number` VARCHAR(255) COMMENT '订单号,冗余',
`goods_info` JSON COMMENT '当时商品信息,冗余',
`number` INT(10) DEFAULT 1 COMMENT '数量',
`price` BIGINT(20) NOT NULL COMMENT '单价',
`order_amount` BIGINT(20) DEFAULT 0 COMMENT '订单金额',
`pay_amount` BIGINT(20) DEFAULT 0 COMMENT '支付金额',
`logistics_state` TINYINT(1) DEFAULT 0 COMMENT '0未发货,1已发货,2已到达,3确认收到',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_order_id (`order_id`),
INDEX index_user_id (`user_id`),
INDEX index_goods_id (`goods_id`),
INDEX index_order_number (`order_number`)
) COMMENT '订单明细表';
-- 订单支付表
CREATE TABLE order_payment
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`order_id` BIGINT(20) COMMENT 'order_info.id',
`user_id` BIGINT(20) COMMENT 'user_info.id',
`platform_id` BIGINT(20) COMMENT 'pay_platform.id',
`order_number` VARCHAR(255) COMMENT '订单号,冗余',
`pay_amount` BIGINT(20) DEFAULT 0 COMMENT '支付金额,冗余',
`pay_number` VARCHAR(255) COMMENT '支付平台的单号',
`pay_channel` VARCHAR(255) COMMENT '支付渠道(支付地点)',
`pay_account` VARCHAR(64) COMMENT '支付的账号',
`payer_bank` VARCHAR(64) COMMENT '支付者的开户行',
`pay_time` DATETIME COMMENT '支付的时间',
`arrival_time` DATETIME COMMENT '到帐的时间',
`coupon_ids` VARCHAR(255) COMMENT '使用的优惠劵',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_order_id (`order_id`),
INDEX index_user_id (`user_id`),
INDEX index_platform_id (`platform_id`),
INDEX index_order_number (`order_number`)
) COMMENT '订单支付表';
-- 商品退还表
CREATE TABLE goods_return
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`item_id` BIGINT(20) COMMENT 'order_item.id',
`user_id` BIGINT(20) COMMENT 'user_info.id',
`order_id` BIGINT(20) COMMENT 'order_info.id,冗余',
`goods_id` BIGINT(20) COMMENT 'goods_info.id,冗余',
`order_number` VARCHAR(255) COMMENT '订单号,冗余',
`number` INT(10) DEFAULT 1 COMMENT '退还数量',
`price` BIGINT(20) NOT NULL COMMENT '单价',
`amount` BIGINT(20) DEFAULT 0 COMMENT '金额',
`return_state` TINYINT(1) DEFAULT 1 COMMENT '-1打回,0取消,1发起,2受理,3已支付',
`logistics_state` TINYINT(1) DEFAULT 0 COMMENT '0未发货,1已发货,2已到达,3确认收到',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_item_id (`item_id`),
INDEX index_user_id (`user_id`),
INDEX index_order_id (`order_id`),
INDEX index_goods_id (`goods_id`),
INDEX index_order_number (`order_number`)
) COMMENT '商品退还表';
-- 商品评论表
CREATE TABLE goods_feedback
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`parent_id` BIGINT(20) UNSIGNED COMMENT 'self.id,回复反馈',
`item_id` BIGINT(20) COMMENT 'order_item.id',
`user_id` BIGINT(20) COMMENT 'user_info.id',
`order_id` BIGINT(20) COMMENT 'order_info.id,冗余',
`goods_id` BIGINT(20) COMMENT 'goods_info.id,冗余',
`order_number` VARCHAR(255) COMMENT '订单号,冗余',
`username` VARCHAR(255) COMMENT 'user_info.username,冗余',
`image` VARCHAR(255) COMMENT '上传的图片,多个逗号分割',
`quality_score` TINYINT(3) DEFAULT 5 COMMENT '质量的评分',
`logistics_score` TINYINT(3) DEFAULT 5 COMMENT '物流的评分',
`quality_info` VARCHAR(255) COMMENT '质量的反馈',
`logistics_info` VARCHAR(255) COMMENT '物流的反馈',
`praise` INT(10) DEFAULT 0 COMMENT '点赞数',
`rank` BIGINT(20) UNSIGNED COMMENT '排序,由小到大排序',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_item_id (`item_id`),
INDEX index_user_id (`user_id`),
INDEX index_order_id (`order_id`),
INDEX index_goods_id (`goods_id`),
INDEX index_order_number (`order_number`)
) COMMENT '商品评论表';
-- 用户浏览表
CREATE TABLE user_browse
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`goods_id` BIGINT(20) COMMENT 'goods_info.id',
`goods_info` JSON COMMENT '商品信息,冗余',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`),
INDEX index_user_id (`goods_id`)
) COMMENT '用户浏览表';
-- 用户收藏表
CREATE TABLE user_collect
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`goods_id` BIGINT(20) COMMENT 'goods_info.id',
`goods_info` JSON COMMENT '商品信息,冗余',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`),
INDEX index_user_id (`goods_id`)
) COMMENT '用户收藏表';
-- 用户意向表
CREATE TABLE user_intention
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`goods_id` BIGINT(20) COMMENT 'goods_info.id',
`goods_info` JSON COMMENT '商品信息,冗余',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`),
INDEX index_user_id (`goods_id`)
) COMMENT '用户意向表';
-- 用户购物车表
CREATE TABLE shopping_cart
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT(20) COMMENT 'user_info.id',
`goods_id` BIGINT(20) COMMENT 'goods_info.id',
`goods_info` JSON COMMENT '当时商品信息,冗余',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX index_user_id (`user_id`),
INDEX index_user_id (`goods_id`)
) COMMENT '用户购物车表';
-- 页面信息表
CREATE TABLE page_info
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`role` BIGINT(20) UNSIGNED DEFAULT 0 COMMENT 'role_info.rank, 0 所有人都可以访问',
`url` VARCHAR(255) COMMENT '请求路径,即接口',
`name` VARCHAR(15) COMMENT '导航名称',
`rank` BIGINT(20) UNSIGNED COMMENT '排序,由小到大排序',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_name (`url`)
) COMMENT '页面信息表';
-- 商品导航表
CREATE TABLE navigation_group
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`parent_id` BIGINT(20) UNSIGNED COMMENT 'sef.id',
`page_role` BIGINT(20) UNSIGNED DEFAULT 0 COMMENT '复制page_info.role',
`page_url` VARCHAR(15) COMMENT 'page_info.url',
`name` VARCHAR(15) COMMENT '商品导航名称',
`rank` BIGINT(20) UNSIGNED COMMENT '排序,由小到大排序',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
FOREIGN KEY (`parent_id`) REFERENCES navigation_group (`id`)
) COMMENT '商品导航表';
-- 支付平台表。
CREATE TABLE pay_platform
(
`id` BIGINT(20) UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(255) COMMENT '平台名称',
`info` VARCHAR(255) COMMENT '平台说明',
`state` TINYINT(1) DEFAULT 1,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE INDEX unique_name (`name`)
) COMMENT '支付平台表';
好,数据库设计,先这样,我是姜友华,下次见。