跳到主要内容

秒杀系统数据模型设计

一、前言


正所谓:万事俱备,只欠东风,前面我们为设计和研发秒杀系统做了那么多的准备,目前在正式搭建项目并研发代码之前,还需要梳理清楚整个秒杀系统所包含的数据模型,只有将这些数据模型梳理清楚,才能更好的指导我们研发秒杀系统。

二、本章诉求


在整个秒杀系统的设计中,尽量简化复杂的流程设计和无关紧要的业务设计,保留最核心的功能,让大家从秒杀系统的设计中领略如何编写高并发程序,并从总体上对系统的优化处理做到心中有数。秒杀系统简化无关紧要的业务后,主要涉及到用户、秒杀活动、秒杀商品和秒杀订单。

另外,这个秒杀系统专栏不仅仅是带着大家写业务代码,更重要的是的系统的调优过程和解决并发瓶颈的思路和方法,好了,马上开始今天的正题。

三、数据模型设计


数据模型对于系统的建设是至关重要的,无论一个系统如何建设和运行,最终这个系统所产生的价值,几乎都是以数据的形式呈现出来,要想体现系统的数据价值,就需要将这些数据收集并存储起来,而无论是对数据的采集、清洗,还是对数据的存储、分析和统计,都是需要建立对应的数据模型。就连时下非常火热的 ChatGPT,都是需要建立在非常丰富的数据模型之上来运行的。

本节,就本着最简化的原则来设计用户、秒杀活动、秒杀商品和秒杀订单的数据模型。

注意:数据库脚本已经存放到项目的 environment/mysql/init 目录下,脚本文件为 seckill_init.sql,在搭建秒杀研发环境时,会自动将数据脚本导入到 MySQL 数据库,无需自己重新运行脚本。

3.1 用户数据模型设计

对于用户数据模型来说,简化后的模型字段包括:用户 id、用户名、密码和状态,整体如下所示。

3.2 秒杀活动数据模型设计

对于秒杀活动来说,简化后的模型字段包括:活动 id、活动名称、开始时间、结束时间、状态、描述,整体如下所示。

3.3 秒杀商品数据模型设计

对于秒杀商品来说,简化后的模型字段包括:商品 id、商品名称、活动 id、开始时间、结束时间、商品原价格、商品秒杀价格、商品初始库存、商品当前可用库存、商品描述、商品图片、状态、限购个数

3.4 秒杀订单数据模型设计

对于秒杀订单来说,简化后的模型字段包括:订单 id、用户 id、商品 id、商品名称、秒杀价格、下单商品数量、订单总金额、活动 id、订单状态、创建时间。

3.5 数据模型汇总

为了更加直观的看到用户、秒杀活动、秒杀商品和秒杀订单三者的模型,我们在数据库中建立对应的数据表,分别为 seckill_user 用户表、seckill_activity 秒杀活动表、seckill_goods 秒杀商品表和 seckill_order 秒杀订单表,并查看对应的模型,如图 9-1 所示。

可以看到,图 9-1 中的数据模型与 3.1~3.4 节中的数据模型是对应的。

四、总结


本章的内容主要是对秒杀系统的数据模型进行了简单的设计,在秒杀系统中,将数据模型进行了简化处理,只保留最核心的用户、秒杀活动、秒杀商品和秒杀订单,对这些具体的模型来说,也只保留了最核心的字段。