高效整合ssm——秒杀系统开发(1)数据表设计

本系列记录了我以电商秒杀系统为载体学习ssm框架整合的学习记录。如果能帮助到你,我不胜荣幸!
首先介绍一下这次要做的项目,是一个电商平台的秒杀系统。主要包括的功能是给定商品信息和秒杀时间段,用户可以以较低价格“秒杀“到这个产品(一人一次机会)。如果重复秒杀或库存为零或时间不正确,都将提示无法秒杀。目前前端页面还在开发中故无法贴图。等到最后会在这里补上项目效果图。
web开发中首先也是最重要的一环是数据表结构的设计。这次的秒杀系统的数据表设计比较简单(因为只是一个小功能,并不是一个完整的web项目),需要两张表。首先建立数据库:

CREATE DATABASE seckill;
USE seckill;

第一张表,秒杀商品信息表:

CREATE TABLE seckill(
  `seckill_id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '商品库存id',
  `name` VARCHAR(120) NOT NULL COMMENT '商品名称',
  `number` INT NOT NULL COMMENT '库存数量',
  `start_time` TIMESTAMP NOT NULL COMMENT '秒杀开始时间',
  `end_time` TIMESTAMP NOT NULL COMMENT '秒杀结束时间',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (seckill_id),
  KEY idx_start_time (start_time),
  KEY idx_end_time (end_time),
  KEY idx_create_time (create_time)
)ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8 COMMENT='秒杀库存表';

TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再存放;当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是不一样的。其中默认值CURRENT_TIMESTAMP是本机时间。给三列时间创建索引的目的是为了加速查询速度。
第二张表,秒杀成功信息记录表:

CREATE TABLE success_killed(
  `seckill_id` BIGINT NOT NULL COMMENT '秒杀商品id',
  `user_phone` BIGINT NOT NULL COMMENT '用户手机号',
  `state` TINYINT NOT NULL DEFAULT -1 COMMENT '状态标识:-1无效,0成功,1已付款',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '秒杀成功时间',
  PRIMARY KEY (seckill_id, user_phone), /*联合主键,防止重复秒杀*/
  KEY idx_create_time (create_time)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表';

这里需要注意的是,使用了产品id加用户手机号两列作为联合主键,这样可以确保秒杀记录的唯一性,可以杜绝重复秒杀行为。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值