抽奖系统数据库设计



首先我们来说说比较常见的随机概率:

这就好像我们说的,我有一百个乒乓,其中一个是红色。然后把这些放到一个盒子里面,然后你在进行摸。当你摸完一次以后,在把你摸到的乒乓放回到盒子里面,在进行摸。这些,你每次摸中红色球的概率都是1/100。于是这样就产生的一个问题,我们对奖品会变得不可控制。如果一个运气好,很有可能机会造成奖品还不够发送。如果运气不好,这些奖品永远都可能留在那里。

 

于是根据这种问题,又有一种方法,每一次我们摸中的球,不放回回去了。于是概率也就变成:1/100,1/99,1/98……。这样也就控制了中奖的人数。但是这样又会出现一个问题:作为开奖人我对抽奖时间是不可控的。很多商家希望的是我在每个时间段能发送相应的奖品回去,这样更能提高抽奖的热度。如果一个奖品很快我就发送出去出去了,后面来的人会很失望。

于是根据这个问题,又出现了一种方法。如果我们把奖品放到抽奖的数量上面去,那不就可以控制抽奖的时间和中奖的人数了。如果100次抽奖中,我想每隔10次就有一个中奖,于是,我就随机吧中奖的机会放到5,16,21…..这样的抽奖次数去。这样我就能控制抽奖人的那种心情。能把更多的人留在我这里进行抽奖。

现在我们来说说关于数据库设计:

列名

类型

说明

id

int

ID 自动增长列

OpporName

varchar(30)

设置的抽奖的名称(方面区分)

PrizeID

int

奖品ID

PrizeName

varchar(255)

奖品名称

PrizeNumber

int

奖品数量

OPNumberList

varchar(2000)

数量序列号

PTNum

int

已经抽中的数量

BeginDate

datetime

适用的开始时间

EndDate

datetime

适用的结束时间

ForeNumber

int

在前多少位里面进行选取

AreaID

varchar(20)

地区编号

UserID

varchar(30)

指定用户中奖

NowNumber

int

现在进行抽奖的人数

OrderID

int

奖品优先率

LotteryExp

datetime

领奖的有效时间

OneMaxPriz

int

每次中奖发放的奖品数量

states

int

状态

 

然后我们来说说相关的设计思路:

Id:不做说明

OpporName:主要是为了区分,例如针对一个奖品我还要进行时间段的区分。所以当设置的奖品多的时候,就不方便区分了。

PrizeID:奖品ID。

PrizeName:奖品名称。

PrizeNumber:奖品数量。(方便概率的计算,和奖品的统计。同时如果我对一个设置追加奖品的时候,能更好的使用)

OPNumberList:中奖的次数列表。这个是为了吧奖品设置到每次抽奖的次数上面去,如果数量不是很大,就用varchar类型。

PTNum:已经抽中的数量,这个也是方便,如果追加奖品能进行计算。同时可以计算奖品的剩余数量。

BeginDate:此抽奖概率适用开始时间。

EndDate:此抽奖概率适用结束时间。

ForeNumber:此次抽奖在前多少次抽奖里面进行选取。因为对于抽奖我们本身对某一时段的抽奖人数是不能拿确认的。一个小时里面,他有可能有100个人,或者有200个人。于是我们设置概率也就不能确认在多少,于是我们选择了在某个时段,前多少次抽奖里面进行选取。例如我在2-3点之间,一般来的人为100-500个人,如果当天来的人只有100个,那么我设置到102这样的次数上面,肯定奖品就只有轮空了。如果我们前100个人之间选,那么我的奖品肯定会配送出去的。

AreaID:适于于那些地区。

UserID:我指定抽中的为某个人。这个是为了某些公司有自己的托而进行的设置。

NowNumber:现在抽奖的次数。

OrderID:奖品的概率排序。如果我有多个奖品在一个时间进行了覆盖。我肯定要设置优先把那些奖品分配出去。

LotteryExp:领奖的有效时间。

OneMaxPriz:每次奖品中奖发放的数量。如果我们每次中奖给2张点卡,等等。

States:状态。概率状态。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抽奖系统设计⽅案 抽奖系统设计⽅案 1,项⽬简介 ,项⽬简介   本课题主要是基于VUE和SpringBoot框架实现⼀个抽奖系统服务端,该抽奖平台是⼀个⽀持多种不同的抽奖⽅式且⽀持⾼并发的多种⽤户系 统,抽奖系统⾓⾊共分为四类,包括基础的抽奖⽤户,抽奖发布者,进⾏数据信息管理的后端管理员以及⾃动执⾏抽奖的抽奖执⾏模块。普通⽤户 可以查看并参加抽奖;抽奖发布者可以发布抽奖,管理⾃⼰发布的抽奖信息和参加该抽奖的⽤户,获取系统返回的中奖⽤户并发奖;管理员可以通 过抽奖系统后端管理现有的抽奖及⽤户信息;抽奖执⾏模块则负责⾃动适时执⾏各类抽奖。 2,开发环境 ,开发环境   前台开发平台:web前端   后台开发平台:IntelliJ IDEA   数据库:MySQL & Redis   服务器:云服务器(BAE或SAE)   计算机硬件配置:     抓取服务器:内存1.5G以上     数据服务器:内存2G以上 3,使⽤的技术   前端:vue   后端     web框架:Springboot     持久层框架:JPA     认证授权框架:Shiro     分布式框架:Dubbo+Zookeeper     搜索框架:ElasticSearch   数据库:     mysql+redis 4,设计模式 ,设计模式 4.1 ⼋⼤设计原则 ⼋⼤设计原则   提到设计模式,我们⾸先需要了解设计模式的设计原则。  1. 依赖倒置原则(DIP) ⾼层模块(稳定)不应该依赖于低层模块(变化),⼆者都应该依赖于抽象(稳定)。 抽象(稳定)不应该依赖于实现细节(变化),实现细节(变化)应该依赖于抽象(稳定)。 2. 开放封闭原则(OCP) 对扩展开放,对更改封闭。 类模块应该是可以扩展的,但是不可修改。 3. 单⼀职责原则(SRP) ⼀个类应该仅有⼀个引起它变化的原因。 变化的⽅向隐含着类的责任。 4. Liskov替换原则(LSP) ⼦类必须能够替换它们的基类(IS-A)。 继承表达类型抽象。 5. 接⼝隔离原则(ISP) 不应该强迫客户程序依赖它们不⽤的⽅法。 接⼝应该⼩⽽完备。 6. 优先使⽤对象组合,⽽不是类继承 类继承通常为"⽩箱复⽤",对象组合通常为"⿊箱复⽤"。 继承在某种程度上破坏了封装性,⼦类⽗类耦合度过⾼。 ⽽对象组合则只要求被组合的对象具有良好定义的接⼝,耦合度较低。 7. 封装变化点 使⽤封装来创建对象之间的分界层,让设计者可以在分界层的⼀侧进⾏修改,⽽不会对另⼀侧产⽣不良的影响,从⽽实现层次间的松耦 合。 8. 针对接⼝编程,⽽不是针对实现编程 不将变量类型声明为某个特定的具体类型,⽽是声明为某个接⼝。 客户程序⽆需获知对象的具体类型,是需要知道对象所具有的接⼝。 减少系统中各部分的依赖关系,从⽽实现"⾼内聚,松耦合"的类型设计⽅案。  4.2 重构关键技法 重构关键技法    静态 -> 动态 早绑定 -> 晚绑定 继承 -> 组合 编译时依赖 -> 运⾏时依赖 紧耦合 -> 松耦合 4.3 本项⽬中运⽤的设计模式 本项⽬中运⽤的设计模式   对象创建过程中使⽤new,new依赖具体类,耦合度⾼。为了避免new,减少依赖,提供封装机制避免直接new,降低耦合度。   ⼀般的new 违背了 依赖倒置原则(依赖抽象,⽽不依赖具体)     例:A a = new A(); //此处的A是⼀个具体的类,⽽不是抽象   根据依赖倒置原则,我们应该尽可能的使⽤抽象设计,减少具体(可以降低耦合),但是抽象类是不可以实例化的(new),此时就需要⼀种 ⽅式来解决实例化问题。提供⼀个⼯⼚接⼝,把创建对象的任务往后推给⼦类,使当前类与new隔离。该种设计模式就是⼯⼚模式。   使⽤⼯⼚模式的好处:⼯⼚模式⽤于隔离类对象的使⽤者和具体类型之间的耦合关系。⾯对⼀个经常变化的具体类型,紧耦合关系(new)会导致 软件的脆弱。⼀旦更改具体类型,就要更改使⽤者中的代码,耦合度太⾼,⽽⼯⼚⽅法,降低了两者的耦合度,类型改变或增加时只需改变/增加⼯⼚ ⼦类即可,⽽使⽤者的源码不必改变。   ⼯⼚模式的通⽤类图结构图:(附部分注释,希望可以帮助读者快速理解)     5,架构风格 ,架构风格 5.1 微服务架构 微服务架构   "微服务架构是⼀种架构模式,它提倡将单⼀应⽤程序划分成⼀组⼩的服务,服务之间相互协调、互相配合,为⽤户提供最终价值。每个服务 运⾏在其独⽴的进程中,服务和服务之间采⽤轻量级的通信机制相互沟通(通常是基于HTTP的Restful API).每个服务都围绕着具体的业务进⾏构 建,并且能够被独⽴的部署到⽣产环境、类⽣产环境等。微服务架构有如下优点:     1,提升开发交流,每个服务⾜够内聚,⾜够⼩,代码容易理解;     
抽奖系统是由程序设计实现的一个功能,用于从一定范围的参与者中随机选取获奖者。下面是一个基于Java的简单抽奖系统设计方案: 1. 首先,确定抽奖的参与者范围。可以通过从文件、数据库或用户输入等方式获取参与者的信息,存储到集合中。假设使用List集合存储。 2. 实现一个随机数生成器,用于从参与者集合中随机选择一个作为获奖者。可以使用Random类,通过nextInt方法生成一个随机数,然后根据随机数从集合中选择一个获奖者。 3. 设计一个抽奖界面,可以选择开始抽奖或退出系统。可以使用图形界面或命令行界面实现。 4. 开始抽奖时,系统将调用随机数生成器选出一个获奖者,并将其显示在界面上。 5. 用户可以选择退出系统,或者再次进行抽奖操作。 6. 最后,设计一些异常处理机制,例如处理输入错误、无参与者等异常情况。 这个简单的抽奖系统可以通过编写Java类和方法来实现。在程序的运行过程中,通过调用随机数生成器来获取获奖者,并将其输出到界面上。用户可以重复进行抽奖,直到选择退出系统。 当然,这只是一个简单的抽奖系统设计方案,还可以根据需求对其进行扩展和优化。例如,可以添加更多的界面交互功能、奖品设置、参与者信息管理等。抽奖系统的具体实现会涉及更多的细节,可以根据实际需要进行相应的设计和开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值