四、商城系统数据库设计

Hi,大家好,我是姜友华。
今天,我将进行一套商城系统的Mysql数据库设计。需要注意的是,数据库暂时不支持商铺。

一、大约说一下。

像商城类的数据库,初期的难点在于树状结构表(树状表)的缺的。Mysql8.0出来后这个难点就没有了。

表的分类。

我把数据表对应着数据逻辑的分类分为四类:集合表、线性表、树形表、关联表(图形)。

  1. 集合表:集合只保存同类的独立的各项目信息。集合表有一种特殊的情况是所保存的只有项目名称,我称这种集合表为枚举表。集合表同时有可能因为项目信息过多被纵向分表,我称他们为主体表与拓展表,主体表有项目名,拓展表引用主体表的项目ID。
  2. 线性表:表达线性关系数据。
  3. 树状表:单表内实现无限分级功能。以前有好几种表达方式,这里只使用id name parent_id这一种形式。
  4. 关联表:表达一对多关系,大部分关联表使用的是ID对应ID。

表设计的约定。

  1. 固定列。
    阿里巴巴《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`)
)
  1. 使用按位或|表达多项选择。
    为了减少关联表的使用,我们表达一对多关系时会用到使用按位。即使用2的N次方来表达选项(如权限),关联时保存多个选项的和。
  • 优点:省去了关联表,也意味着省去了多表关联查询。
  • 缺点:选项不能过多,比如使用BIGINT,也不能超过64个选项。
  1. 最后,我们的货币单位是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_detailinfo,使用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 '支付平台表';

好,数据库设计,先这样,我是姜友华,下次见。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容