基于微信分享的数据库设计

最近一直在做 基于微信分享的活动.比如说 发起一个分享到微信朋友圈,然后朋友们点击了改分享之后,能够获取什么样的好处.

可以进行抽奖,或者是获得优惠券什么的.由于基本流程大致相同,所以将这一块功能独立处理,作为一个功能组件,称为 微信邀请组件.

数据库设计如下

1 发起邀请记录(邀请函) 字段如下:

activity 邀请活动
FromUserName 微信号
nickname 微信昵称
headimgurl 微信头像
url 邀请函URL
desc 邀请函说明
worth 价值
invited_num 接受邀请次数
invited_total 邀请总次数限制,0为无限制
send_time 发送时间
is_need_subscribed 是否需要微信关注
subscibe_hint_url 关注提示页面链接
personal_receive_num 每人领取次数限制,0为无限制
memo 备注

该表的作用就是记录某次活动中产生的邀请记录(,我把它称为邀请函),描述该邀请具备的一些属性.以下是重要字段的说明:

邀请函的拥有人ID,昵称,头像(FromUserName,nickname,headimgurl);

邀请函的价值 worth, 这个价值的意义是随着活动的不同业务而不同的. 比如说是积分,比如说是金币,比如说是抽奖机会等等.

邀请函被领取的总次数 invited_total,0为无限制,>0的时候是说明最多有invited_total次能领取该邀请函;

领取邀请函时是否要求领取用户必须是关注微信的用户 is_need_subscribed,有些活动的目的,就是要增粉,所以希望只有关注过微信的人才能参加这个活动,这个字段就是为这个目的的.

接受邀请次数 invited_num 是随着领取该邀请函的增加而增加的.但是它的值不能超过 invited_total(当 invited_total>0的时候).当 invited_num== invited_total的时候,就是说明该邀请函已满了,无法被领取了.

2 领取邀请记录 字段如下:

activity 邀请活动
invitation_id 邀请函ID
owner_FromUserName 发送邀请的微信ID
owner_nickname 发送邀请的微信昵称
owner_headimgurl 发送邀请的微信头像
got_FromUserName 接受邀请的微信ID
got_nickname 接受邀请的微信昵称
got_headimgurl 接受邀请的微信头像
got_time 接受时间
got_worth 获取价值
memo 备注

该表的作用就是记录某次活动某次分享被朋友领取的情况信息,以下是重要字段的说明

获取价值 got_worth,这个价值的意义是随着活动的不同业务而不同的. 比如说是积分,比如说是金币,比如说是抽奖机会等等.

邀请函的拥有人ID,昵称,头像(owner_FromUserName,owner_nickname,owner_headimgurl);

领取邀请函的人ID,昵称,头像(got_FromUserName,got_nickname,got_headimgurl);

3 邀请活动 字段如下:

code 编号
name 名称

该表的作用就是生成某次活动的信息,比如说 1001 圣诞活动

4 邀请用戶 字段如下:

activity 活动
FromUserName 微信号
nickname 昵称
headimgurl 头像
worth 价值
memo 备注
log_time 记录时间

该表的作用就是记录参与某次活动中所有的用户信息(分享者和接收者),,以下是重要字段的说明:

价值 worth 它的作用不定,它可以表示获得的积分,也可以表示获得的抽奖机会次数等等.这个字段是随着具体活动的业务规则而定.

可能某些人会觉得疑问,

1 为何在发起邀请记录(邀请函)和领取邀请记录表中都故意增加了 昵称和头像的字段? 昵称和头像可以通过关联其他表可以获得.

该设计的确是违法了3范式,但是是为了查询性能考虑故意为之, 减少关联操作,能获取更快的查询速度,而且微信头像和昵称一般不会经常变更,这种用空间换取时间的做法在数据库设计中很常见.

2 为何在发起邀请记录(邀请函) 增加了invited_num的字段,这个值完全可以从领取邀请记录表里查询出来的?

其实理由 同第一个问题的理由基本上是一致的.如果每次都要到领取邀请记录表去查询某个邀请函被领取的次数的话,查询速度和效率太低下.

3 往往很多系统中已经存在了类似于 邀请用戶表的用户表,比如说会员表等等,所以邀请用戶表有点多余?

的确如此,在我原来的设计中本来是没有该表的,后来增加该表的原因是为了减少查询,提高性能考虑的.我举个例子.

在某次活动中,业务规则是这样的,发起分享的人可以参加一次抽奖,如果该分享被4个人领过的话,说明该邀请函已满了,那么发起分享的人再增加一次抽奖的机会,同时所有领取该分享的人都增加一次抽奖的机会

所以如何判断某个人具有几次抽奖机会,是一个比较耗时的查询操作.为了减少这个查询,所以增加了该表,而worth字段就是记录了抽奖机会次数.

时间: 2024-12-28 17:01:45

基于微信分享的数据库设计的相关文章

Spring Boot微信点餐——数据库设计

数据库设计: 具体代码如下: create table `product_info` ( `product_id` varchar(32) not null comment '商品ID', `product_name` varchar(64) not null comment '商品名称', `product_price` decimal(10,2) not null comment '商品单价', `product_stock` int not null comment '库存', `prod

数据库系统原理(第三章数据库设计 )

一.数据库设计概述 数据库的生命周期  数据库设计的目标: 满足应用功能需求(存.取.删.改), 良好的数 据库性能(数据的高效率存取和空间的节省 共享性.完整性.一致性.安全保密性) 数据库设计的内容  数据库设计的方法 直观设计法( 最原始的数据库设计方法) 规范设计法:(新奥尔良设计方法:需求分析.概念结构设计.逻辑结构设计.物理结构设计 : 基于E-R模型的数据库设计方法 :基于第三范式的设计方法,是一类结构化设计方法) 计算机辅助设计法( 辅助软件工程工具) 数据库设计的过程 二.数据

基于Extjs的web表单设计器 第五节——数据库设计

这里列出表单设计器系列的内容,6.7.8节的内容应该在春节后才有时间出了.因为这周末就请假回老家了,准备我的结婚大事.在此提前祝大家春节快乐! 基于Extjs的web表单设计器 基于Extjs的web表单设计器 第一节 基于Extjs的web表单设计器 第二节——表单控件设计 基于Extjs的web表单设计器 第三节——控件拖放 基于Extjs的web表单设计器 第四节——控件拖放 基于Extjs的web表单设计器 第五节——数据库设计 基于Extjs的web表单设计器 第六节——界面框架设计

基于Android平台的汽车租赁平台项目的数据库设计心得

我们团队的项目是基于Android平台的汽车租赁平台,其分为手机客户端与web后台管理系统,用以满足租车公司的业务需求,故数据库设计对于本项目显得尤为重要,我们团队数据库设计最开始用的是最原始的方式:Word手动输入,但随后随着数据库课程以及实验的学习,我们最后使用的PowerDesigner设计的数据库并生成了SQL文件,导入数据库完成的数据库最终设计与搭建,我们团队于第8周完成了数据库的搭建. 数据库设计中,数据库要严格与项目需求相联系,同时保证数据库数据完整.正确.安全以及数据处理的高效与

本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI(转载)

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多 ▼ 您还未登录 ! 登录 注册 机遇&速度 博客 微博 相册 收藏 留言 关于我 android 仿微信聊天界面,以及语音录制功能 博客分类: android 录音 android 录音android 仿微信聊天界面android 仿微信录音UIandroidandroid 语音 本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图:     第一:chat.xml设计 Xml代码   <?xml version=&q

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

从零开始编写自己的C#框架(9)——数据库设计与创建

对于千万级与百万级数据库设计是有所区别的,由于本项目是基于中小型软件开发框架来设计,记录量相对会比较少,所以数据库设计时考虑的角度是:与开发相结合:空间换性能:空间换开发效率:减少null异常......当然不同的公司与项目要求不同,初学者要学会适应不同的项目开发要求,使用本框架开发时,必须严格按照本章节的要求来设计数据库,不然可能会产生不可控的异常. 从零开始编写自己的C#框架 数据库设计规范   文件状态: [√] 草稿 [  ] 正式发布 [  ] 正在修改 文件标识: C#框架 当前版本

写给开发者看的关系型数据库设计

目录 一 Codd的RDBMS12法则——RDBMS的起源 二 关系型数据库设计阶段 三 设计原则 四 命名规则 数据库设计,一个软件项目成功的基石.很多从业人员都认为,数据库设计其实不那么重要.现实中的情景也相当雷同,开发人员的数量是数据库设计人员的数倍.多数人使用数据库中的一部分,所以也会把数据库设计想的如此简单.其实不然,数据库设计也是门学问. 从笔者的经历看来,笔者更赞成在项目早期由开发者进行数据库设计(后期调优需要DBA).根据笔者的项目经验,一个精通OOP和ORM的开发者,设计的数据