# 《Seckill秒杀系统》第68章:预约系统数据模型设计
作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
沉淀,成长,突破,帮助他人,成就自我。
- 本章难度:★★☆☆☆
- 本章重点:万事俱备,开始对预约系统的数据模型进行设计,主要会涉及到对秒杀商品的预约配置和用户预约秒杀商品的数据模型设计。
大家好,我是冰河~~
在618和双11的大促秒杀活动中,会存在这样一种场景:某些秒杀商品需要提前预约,只有预约成功的用户才有初步的资格来抢购秒杀商品。用户预约秒杀商品的逻辑往往是在单独的预约系统中完成的。
# 一、前言
在前面的文章中,我们分析并梳理了预约系统的需求,并基于预约系统的需求对其进行了业务上的总体架构设计。在正式研发预约系统之前,还需要梳理清楚整个预约系统的数据模型,只有将这些数据模型梳理清楚,才能更好的指导我们研发秒杀系统。
# 二、本章诉求
与秒杀系统的设计一样,我们在设计预约系统中,同样本着尽量简复杂的流程设计和无关紧要的业务流程,保留最核心的功能,让大家从预约系统的设计中也能领略到如何编写高并发程序,并从总体上对系统的优化处理做到心中有数。对于预约系统来说,只保留最核心的逻辑后,主要涉及到秒杀商品的预约信息配置和用户预约秒杀商品的记录。
另外,设计预约系统同样不仅仅是带着大家写业务代码,更重要的是系统的调优过程和解决并发瓶颈的思路和方法,以及相关的落地实践方案,好了,马上开始今天的正题。
# 三、数据模型设计
数据对于企业来说是至关重要的,可以这么说,一个系统乃至一个企业的价值最终都是会通过数据的形式展现出来。而对这些数据的分析和处理都是需要建立在对应的数据模型之上,就连时下非常火热的ChatGPT,都是需要建立在非常丰富的数据模型之上来运行的。所以,数据要想体现其价值,就需要基于对应的数据模型来进行分析和处理。
本节,就本着最简化的原则来设计预约系统的数据模型。
注意:数据库脚本已经存放到项目的environment/mysql/init
目录下,脚本文件为seckill_reservation_init.sql
,在运行docker-compose文件时,会自动将数据脚本导入到MySQL数据库,无需自己重新运行脚本。
# 3.1 秒杀商品配置数据模型
对于秒杀商品配置预约信息来说,简化后的数据模型字段包括:预约配置id、秒杀商品id、秒杀商品名称、预约人数上限、当前预约人数、预约开始时间、预约结束时间、秒杀开始时间、秒杀结束时间、预约配置状态。整体如下所示。
字段名称 | 类型 | 长度 | 默认值 | 说明 |
---|---|---|---|---|
id | bigint | 20 | 无 | 数据主键,预约配置id |
goods_id | bigint | 20 | 0 | 秒杀商品id |
goods_name | varchar | 100 | 空字符串 | 秒杀商品名称 |
reserve_max_user_count | int | 11 | 0 | 预约人数上限,不做严格限制 |
reserve_current_user_count | int | 11 | 0 | 当前预约人数,实际可比预约人数上限大,也可比其小,在一定范围内即可 |
reserve_start_time | datetime | 默认 | NULL | 预约开始时间 |
reserve_end_time | datetime | 默认 | NULL | 预约结束时间 |
seckill_start_time | datetime | 默认 | NULL | 秒杀开始时间 |
seckill_end_time | datetime | 默认 | NULL | 秒杀结束时间 |
state | int | 2 | 1 | 配置状态,0:已发布,1:上线;-1:下线 |
# 3.2 用户预约记录数据模型
# 查看完整文章
加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码