• 数据库表结构


    1.用户表:

     1 /*用户表*/
     2 /*
     3 CREATE TABLE user (
     4     id int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表id',
     5     username varchar(50) NOT NULL COMMENT '用户名',
     6     password varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
     7     email varchar(50) DEFAULT NULL,
     8     phone varchar(50) DEFAULT NULL,
     9     question varchar(100) DEFAULT NULL COMMENT '找回密码问题',
    10     answer varchar(100) DEFAULT NULL COMMENT '找回密码答案',
    11     role int(4) NOT NULL COMMENT '角色0-管理员,1-普通用户',
    12     create_time datetime NOT NULL COMMENT '创建时间',
    13     update_time datetime NOT NULL COMMENT '最后一次更新时间',
    14     PRIMARY KEY(id),
    15     UNIQUE KEY user_name_unique(username) USING BTREE
    16 ) ENGINE = InnoDB AUTO_INCREMENT = 21 DEFAULT CHARSET = utf8
    17 */
    View Code

    ps:将用户名在数据库层面锁定唯一性,可以避免在业务层面再进行加锁同步处理。

    2.分类表:

     1 /*分类表*/
     2 /*
     3 CREATE TABLE category(
     4     id int(11) NOT NULL AUTO_INCREMENT COMMENT '类别id',
     5     parent_id int(11) DEFAULT NULL COMMENT '父类别id,当id=0时说明是根节点,一级类别',
     6     name varchar(50) DEFAULT NULL COMMENT '类别名称',
     7     status tinyint(1) DEFAULT '1' COMMENT '类别状态1-正常,2-已废弃',
     8     sort_order int(4) DEFAULT NULL COMMENT '排序编号,同类展示顺序,数值相等则自然排序',
     9     create_time datetime DEFAULT NULL COMMENT '创建时间',
    10     update_time datetime DEFAULT NULL COMMENT '更新时间',
    11     PRIMARY KEY(id)
    12 ) ENGINE = InnoDB AUTO_INCREMENT = 100032 DEFAULT CHARSET = utf8
    13 */
    View Code

    ps:parent_id作用:这个表需要考虑递归性,并且这个分类有可能是无限层级扩展,我们需要一个递归结束条件。所以这里我们添加一个parent_id属性,当parent_id=0时递归结束。

    3.产品表:

     1 /*产品表*/
     2 /*
     3 CREATE TABLE product(
     4     id int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id',
     5     category_id int(11) NOT NULL COMMENT '分类id,对应category表的主键',
     6     name varchar(100) NOT NULL COMMENT '商品名称',
     7     subtitle varchar(200) DEFAULT NULL COMMENT '商品副标题',
     8     main_image varchar(500) DEFAULT NULL COMMENT '产品主图,url相对地址',
     9     sub_images text COMMENT '图片地址,json格式,扩展用',
    10     detail text COMMENT '商品详情',
    11     price decimal(20,2) NOT NULL COMMENT '价格,单位-元,保留两位小数',
    12     stock int(11) NOT NULL COMMENT '库存数量',
    13     status int(6) DEFAULT '1' COMMENT '商品状态,1-在售,2-下架,3-删除',
    14     create_time datetime DEFAULT NULL COMMENT '创建时间',
    15     update_time datetime DEFAULT NULL COMMENT '更新时间',
    16     PRIMARY KEY(id)
    17 ) ENGINE = InnoDB AUTO_INCREMENT = 26 DEFAULT CHARSET = utf8
    18 */
    View Code

    ps:为什么存url相对地址?业务层在获取主图的时候,我们把图片服务器的前缀拿到之后和main_image进行拼接,这样即使图片服务器迁移,或者域名修改,我们也只需要改代码里的配置文件。

    4.购物车表:

     1 /*购物车表*/
     2 /*
     3 CREATE TABLE cart(
     4     id int(11) NOT NULL AUTO_INCREMENT,
     5     user_id int(11) NOT NULL,
     6     product_id int(11) DEFAULT NULL COMMENT '商品id',
     7     quantity int(11) DEFAULT NULL COMMENT '商品数量',
     8     checked int(11)  DEFAULT NULL COMMENT '是否选择,1-已勾选,0-未勾选',
     9     create_time datetime DEFAULT NULL COMMENT '创建时间',
    10     update_time datetime DEFAULT NULL COMMENT '更新时间',
    11     PRIMARY KEY(id),
    12     KEY user_id_index(user_id) USING BTREE
    13 ) ENGINE = InnoDB AUTO_INCREMENT = 121 DEFAULT CHARSET = utf8
    14 */
    View Code

    ps:添加了user_id的索引,因为经常利用user_id来查询此表。

    5.支付信息表:

     1 /*支付信息表*/
     2 /*
     3 CREATE TABLE pay_info(
     4     id int(11) NOT NULL AUTO_INCREMENT,
     5     user_id int(11) DEFAULT NULL COMMENT '用户id',
     6     order_no bigint(20) DEFAULT NULL COMMENT '订单号',
     7     pay_platform int(10) DEFAULT NULL COMMENT '支付平台:1-支付宝,2-微信',
     8     platform_number varchar(200) DEFAULT NULL COMMENT '支付宝支付流水号',
     9     platform_status varchar(20) DEFAULT NULL COMMENT '支付宝支付状态',
    10     create_time datetime DEFAULT NULL COMMENT '创建时间',
    11     update_time datetime DEFAULT NULL COMMENT '更新时间',
    12     PRIMARY KEY(id)
    13 ) ENGINE = InnoDB AUTO_INCREMENT = 53 DEFAULT CHARSET = utf8
    14 */
    View Code

    ps:platform_number解释:生成订单发起支付请求后,会生成远程的支付宝流水号。

    6.订单表:

     1 /*订单表*/
     2 /*
     3 CREATE TABLE mall_order(
     4     id int(11) NOT NULL AUTO_INCREMENT COMMENT '订单id',
     5     order_no bigint(20) DEFAULT NULL COMMENT '订单号',
     6     user_id int(11) DEFAULT NULL COMMENT '用户id',
     7     shipping_id int(11) DEFAULT NULL,
     8     payment decimal(20,2) DEFAULT NULL COMMENT '实际付款金额,单位是元,保留两位小数,整数部分为18位',
     9     payment_type int(4) DEFAULT NULL COMMENT '支付类型,1-在线支付',
    10     postage int(10) DEFAULT NULL COMMENT '运费,但会是元',
    11     status int(10) DEFAULT NULL COMMENT '订单状态:0-已取消,10-未付款,20-已付款,40-已发货,50-交易成功,60-交易关闭',
    12     payment_time datetime DEFAULT NULL COMMENT '支付时间',
    13     send_time datetime DEFAULT NULL COMMENT '发货时间',
    14     end_time datetime DEFAULT NULL COMMENT '交易完成时间',
    15     close_time datetime DEFAULT NULL COMMENT '交易关闭时间',
    16     create_time datetime DEFAULT NULL COMMENT '创建时间',
    17     update_time datetime DEFAULT NULL COMMENT '更新时间',
    18     PRIMARY KEY(id),
    19     UNIQUE KEY order_no_index(order_no) USING BTREE
    20 ) ENGINE = InnoDB AUTO_INCREMENT = 103 DEFAULT CHARSET = utf8
    21 */
    View Code

    ps:对订单号添加了唯一索引。

    7.订单明细表:

     1 /*订单明细表*/
     2 /*
     3 CREATE TABLE order_item(
     4     id int(11) NOT NULL AUTO_INCREMENT COMMENT '订单子表id',
     5     user_id int(11) DEFAULT NULL,
     6     order_no bigint(20) DEFAULT NULL,
     7     product_id int(11) DEFAULT NULL COMMENT '商品id',
     8     product_name varchar(100) DEFAULT NULL COMMENT '商品名称',
     9     product_image varchar(500) DEFAULT NULL COMMENT '商品图片地址',
    10     current_unit_price decimal(20,2) DEFAULT NULL COMMENT '生成订单时的商品单价,单位是元,保留两位小数',
    11     quantity int(10) DEFAULT NULL COMMENT '商品数量',
    12     total_price decimal(20,2) DEFAULT NULL COMMENT '商品总价,单位是元,保留两位小数',
    13     create_time datetime DEFAULT NULL,
    14     update_time datetime DEFAULT NULL,
    15     PRIMARY KEY(id),
    16     KEY order_no_index(order_no) USING BTREE,
    17     KEY order_no_user_id_index(user_id, order_no) USING BTREE
    18 ) ENGINE = InnoDB AUTO_INCREMENT = 113 DEFAULT CHARSET = utf8
    19 */
    View Code

    ps:

    1)这里的user_id其实是一个冗余属性,这里本可以通过order_no连表mall_order,然后查询到user_id,但是这里直接建立user_id属性,可以在查询的时候不用进行关联查询,直接单表查询可以节省查询时间。

    2)这里product_name和product_image可以理解为商品详情的快照,本来可以通过商品id关联product表来查询商品名称和图片,但是这里直接将其存下来,是防止在用户下单后,店家更改该商品的属性,导致用户再次来查看已购订单时商品不一致问题。比如我买的时候是一双手套,过了几天店家将其改成了袜子等。

    3)total_price属性解释:本来可以在查表之后利用业务逻辑来计算其订单总价,这里在其生成订单的时候直接计算将其持久化,方便存取。(为啥我觉得在业务层处理也是可以的。。。)

    4)这里对user_id和order_no添加了组合索引

    8.收货地址表:

     1 /*收货地址*/
     2 /*
     3 CREATE TABLE shipping(
     4     id int(11) NOT NULL AUTO_INCREMENT,
     5     user_id int(11) DEFAULT NULL COMMENT '用户id',
     6     receiver_name varchar(20) DEFAULT NULL COMMENT '收货姓名',
     7     receiver_phone varchar(20) DEFAULT NULL COMMENT '收货固定电话',
     8     receiver_mobile varchar(20) DEFAULT NULL COMMENT '收获移动电话',
     9     receiver_province varchar(20) DEFAULT NULL COMMENT '省份',
    10     receiver_city varchar(20) DEFAULT NULL COMMENT '城市',
    11     receiver_district varchar(20) DEFAULT NULL COMMENT '区/县',
    12     receiver_address varchar(200) DEFAULT NULL COMMENT '详细地址',
    13     receiver_zip varchar(6) DEFAULT NULL COMMENT '邮编',
    14     create_time datetime DEFAULT NULL,
    15     create_tiem datetime DEFAULT NULL,
    16     PRIMARY KEY(id)
    17 ) ENGINE = InnoDB AUTO_INCREMENT = 32 DEFAULT CHARSET = utf8
    18 */
    View Code

    数据流向:

    1.注册(存入user表)->登录(根据user表进行验证)。

    2.搜索产品(根据关键字或category_id),如果category_id级别较高,会对category分类表进行递归查询,然后将符合该分类的和关键字的product商品集合返回。

    3.将产品添加购物车(将product_id以及user_id同时存入cart表,并将产品数量和是否勾选持久化)。

    4.勾选购物车中商品生成订单(对shipping收货地址表进行管理->mall_order生成order_no存入,shipping_id从shipping表获取,payment会对product表进行计算然后存入)。

    5.支付(接到支付宝的回调,将信息存入pay_info表中,对回调状态进行判断,如果支付成功,对mall_order表的payment_type进行写入)

    注意:没有用外键和触发器,数据库扩展时很麻烦。

  • 相关阅读:
    [算法] 神秘数
    教你在Access数据库中如何使用SQL
    亚宇工资管理系统早年制作的一个很小的商业软件[源码和软件截图]
    亚宇工资管理系统早年制作的一个很小的商业软件[源码和软件截图]
    getkeyTw
    一个硬盘的感人的爱情故事!只此一篇
    码农如何快速打造一个有设计感的网站
    NK.bin和NK.nb0学习
    WINCE6.0 + S3C2443的启动过程nboot篇
    S3C2443时钟管理
  • 原文地址:https://www.cnblogs.com/cing/p/7799534.html
Copyright © 2020-2023  润新知