luckydraw-ddd 02-抽奖活动策略库表设计
...大约 5 分钟
领域开发02-抽奖活动策略库表设计
更新 | 说明 | 变动说明 |
---|---|---|
20220117 | 新建 | |
20220117 | 修改 | strategy_detail引入新字段awardSurplusCount |
随着项目需求的迭代不断完善版本信息
数据库设计-20210117
开发分支:
- dev_220117_01_tableDesign
数据库逻辑设计
一个抽奖活动系统的基本需求包括抽奖活动配置、奖品概率配置、奖品梳理配置以及用户抽奖数据信息等,可设计如下数据表结构
数据表 | 说明 |
---|---|
活动配置:activity | 提供活动的基本配置 |
策略配置:strategy | 配置抽奖策略,概率、玩法、库存、奖品 |
策略明细:strategy_detail | 抽奖策略的具体明细配置 |
奖品配置:award | 配置具体可以得到的奖品 |
用户参与活动记录表:user_take_activity | 用户活动参与记录(时间、次数) |
用户活动参与次数表:user_take_activity_count | 用于记录当前参与了多少次 |
用户策略计算结果表:user_strategy_export_001~004 | 最终策略结果的记录(奖品中奖信息的内容) |
数据库物理设计
create database ddd-lottery;
-- auto-generated definition
create table activity
(
id bigint auto_increment comment '自增ID',
activityId bigint null comment '活动ID',
activityName varchar(64) not null comment '活动名称',
activityDesc varchar(128) null comment '活动描述',
beginDateTime datetime not null comment '开始时间',
endDateTime datetime not null comment '结束时间',
stockCount int not null comment '库存',
takeCount int null comment '每人可参与次数',
state int null comment '活动状态:编辑、提审、撤审、通过、运行、拒绝、关闭、开启',
creator varchar(64) not null comment '创建人',
createTime datetime not null comment '创建时间',
updateTime datetime not null comment '修改时间',
constraint activity_id_uindex
unique (id)
)
comment '活动配置';
alter table activity
add primary key (id);
-- auto-generated definition
create table award
(
id bigint(11) auto_increment comment '自增ID'
primary key,
awardId bigint null comment '奖品ID',
awardType int(4) null comment '奖品类型(文字描述、兑换码、优惠券、实物奖品暂无)',
awardCount int null comment '奖品数量',
awardName varchar(64) null comment '奖品名称',
awardContent varchar(128) null comment '奖品内容「文字描述、Key、码」',
createTime datetime default CURRENT_TIMESTAMP null comment '创建时间',
updateTime datetime default CURRENT_TIMESTAMP null comment 'updateTime'
)
comment '奖品配置';
-- auto-generated definition
create table strategy
(
id bigint(11) auto_increment comment '自增ID'
primary key,
strategyId bigint(11) not null comment '策略ID',
strategyDesc varchar(128) null comment '策略描述',
strategyMode int(4) null comment '策略方式「1:单项概率、2:总体概率」',
grantType int(4) null comment '发放奖品方式「1:即时、2:定时[含活动结束]、3:人工」',
grantDate datetime null comment '发放奖品时间',
extInfo varchar(128) null comment '扩展信息',
createTime datetime null comment '创建时间',
updateTime datetime null comment '修改时间',
constraint strategy_strategyId_uindex
unique (strategyId)
)
comment '策略配置';
-- auto-generated definition
create table strategy_detail
(
id bigint(11) auto_increment comment '自增ID'
primary key,
strategyId bigint(11) not null comment '策略ID',
awardId bigint(11) null comment '奖品ID',
awardCount int null comment '奖品数量',
awardRate decimal(5, 2) null comment '中奖概率',
createTime datetime null comment '创建时间',
updateTime datetime null comment '修改时间'
)
comment '策略明细';
问题思考
【1】活动表和抽奖策略表的关联:是将活动ID写入抽奖策略表中还是将抽奖策略ID写入活动表中?
可结合不同业务场景进行分析
将活动ID写入抽奖策略表:在构建抽奖策略的时候得现有活动才能进行构建,不具备灵活性
将抽奖策略ID写入活动表:将抽奖策略相关(抽奖策略表、策略明细、奖品配置构建成一个服务领域),让策略以一种“配置”的概念单独存在供不同的活动或者外部引用
构建系统功能模块数据基础的结构,后续结合功能开发迭代数据库设计字段
lottery_01.sql ~ lottery_02.sql
create database lottery_01;
-- auto-generated definition
create table user_take_activity
(
id bigint null,
uId tinytext null,
takeId bigint null,
activityId bigint null,
activityName tinytext null,
takeDate timestamp null,
takeCount int null,
uuid tinytext null,
createTime timestamp null,
updateTime timestamp null
)
comment '用户参与活动记录表';
-- auto-generated definition
create table user_take_activity_count
(
id bigint null,
uId tinytext null,
activityId bigint null,
totalCount int null,
leftCount int null,
createTime timestamp null,
updateTime timestamp null
)
comment '用户活动参与次数表';
-- auto-generated definition
create table user_strategy_export_001(id bigint null,uId mediumtext null,activityId bigint null,orderId bigint null,strategyId bigint null,strategyType int null,grantType int null,grantDate timestamp null,grantState int null,awardId bigint null,awardType int null,awardName mediumtext null,awardContent mediumtext null,uuid mediumtext null,createTime timestamp null,updateTime timestamp null) comment '用户策略计算结果表';
create table user_strategy_export_002(id bigint null,uId mediumtext null,activityId bigint null,orderId bigint null,strategyId bigint null,strategyType int null,grantType int null,grantDate timestamp null,grantState int null,awardId bigint null,awardType int null,awardName mediumtext null,awardContent mediumtext null,uuid mediumtext null,createTime timestamp null,updateTime timestamp null) comment '用户策略计算结果表';
create table user_strategy_export_003(id bigint null,uId mediumtext null,activityId bigint null,orderId bigint null,strategyId bigint null,strategyType int null,grantType int null,grantDate timestamp null,grantState int null,awardId bigint null,awardType int null,awardName mediumtext null,awardContent mediumtext null,uuid mediumtext null,createTime timestamp null,updateTime timestamp null) comment '用户策略计算结果表';
create table user_strategy_export_004(id bigint null,uId mediumtext null,activityId bigint null,orderId bigint null,strategyId bigint null,strategyType int null,grantType int null,grantDate timestamp null,grantState int null,awardId bigint null,awardType int null,awardName mediumtext null,awardContent mediumtext null,uuid mediumtext null,createTime timestamp null,updateTime timestamp null) comment '用户策略计算结果表';
- 这些库表是用于支撑起抽奖系统开发的必备表,后续可能会随着功能的开发做适当的调整。
- 后续会围绕这些库表一点点实现各个领域的功能,包括:抽奖策略领域、奖品发放领域、活动信息领域等
Powered by Waline v3.1.3