开发微信公众平台之前,先去微信官方了解下大概的情况 这里:http://mp.weixin.qq.com/wiki/index.php ;看了之后心里大致有数了,开始设计数据库,尽可能的考虑,未考虑到的,以后再补充。

1、首先是用户部分,根据微信官方的接口结合实际运用,用户部分有3个表:用户表、用户资料表、用户分组表,我设计的如下:

2、用户设计好之后就是文章部分,包括:文章分类表、文章表,  设计如下:

3、有了用户相关的表我们可以保存用户,有了文章模块的表我们可以根据用户输入的信息查询文章进行返回(返回文本、图文、图片、音乐、视频、语音等等),但是实际运用中,我们存在需要指定特定的关键字返回特定的内容的情况,那么就需要专门的特定关键字模块,  包括:关键字表、关键字返回的内容表,  这里的内容表看着像是与上面的文章表有重合,实则不然, 这里是特定关键字指定的回复内容,可以指定返回文本、图文或其他多媒体信息,当返回多媒体信息时内容中存入文件地址,  上面的文章表是标准的通用的文章内容表, 供用户查询多数情况下直接返回图文信息,且图文信息点击链接时就是这篇文章对应的展示地址, 相当于一个微网站,  所以文章和这个关键字的内容表分开设计更加方便管理。  设计如下:

4、消息记录,  把用户发来的消息进行记录,方便后续处理,  比如 根据用户上次发来的事件消息,之后再发同一个关键词时,返回对应菜单下的内容,而不用用户每次发送消息都带对应的菜单选项;客服消息根据记录的信息做个性化的服务 等等。   包括:用户发来的消息记录表、回复给用户的消息记录表  ,有了这些可以完整的还原和用户的对话,这里是记录和用户交流的过程,具体用户发来的消息需要返回什么样的消息,由项目代码中业务决定。   设计如下:

5、自定义菜单,创建和管理微信公众平台中的自定义菜单,设计如下:

6、其他,  具体根据做的实际项目来设计, 比如 用户分析、访问统计;   用户积分;  二维码相关 等等 ,  此处先不设计。

以上设计中,有一些是没有设计到数据库的, 比如关键字模块中的回复消息类型、消息记录中的消息类型,  这些固定不变(由腾讯决定)的少量的单选项形式的数据,我们在具体项目中使用其他方法来实现(固定静态、配置文件、缓存等),无需设计数据库。

完整设计如下:(为了方便截图 ,我把各个模块的表拖动覆盖了)

下载脚本,如下:在数据库中创建一个名为微信(设计数据库时自己定义的)的数据库,脚本执行一下就OK,

 use  weixin -------微信公众平台
if exists ( select * from sysobjects where name = 'tb_User' and xtype='U')
drop table tb_User
create table tb_User------------------------------------------------------------用户表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
InId int default 0 NOT NULL , --自有系统的用户ID
OpenId varchar(150) default '' NOT NULL , --微信openid
Group int default 0 NOT NULL , --分组ID
NickName varchar(50) default '' NOT NULL , --昵称-微信
CreateTime datetime default getdate() NOT NULL , --创建时间
State int default 1 NOT NULL , --状态-1为正常
PreFirst varchar(150) default '' NOT NULL , --预留字段1
); if exists ( select * from sysobjects where name = 'tb_Group' and xtype='U')
drop table tb_Group
create table tb_Group-----------------------------------------------------------分组表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
Name varchar(50) default '' NOT NULL , --名称-本地
WeiId int default 0 NOT NULL , --对应微信分组ID
WeiName varchar(50) default '' NOT NULL , --微信分组名
Note varchar(100) default '' NOT NULL , --备注
CreateTime datetime default getdate() NOT NULL , --创建时间
State int default 1 NOT NULL , --状态
); if exists ( select * from sysobjects where name = 'tb_UserData' and xtype='U')
drop table tb_UserData
create table tb_UserData--------------------------------------------------------用户资料表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
UserId int default 0 NOT NULL , --用户表主键
Sex int default 0 NOT NULL , --性别0未知1男2女
City varchar(20) default '' NOT NULL , --城市
Country varchar(30) default '' NOT NULL , --国家
Province varchar(20) default '' NOT NULL , --省份
Language varchar(15) default '' NOT NULL , --语言
HeadImgUrl varchar(250) default '' NOT NULL , --用户头像
SubTime varchar(50) default '' NOT NULL , --最后次关注时间戳
CreateTime datetime default getdate() NOT NULL , --创建时间
State int default 1 NOT NULL , --状态
PreFirst varchar(150) default '' NOT NULL , --预留1
); if exists ( select * from sysobjects where name = 'tb_Article' and xtype='U')
drop table tb_Article
create table tb_Article---------------------------------------------------------文章表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
SortId int default 0 NOT NULL , --类别ID
ITop int default 0 NOT NULL , --置顶0不1是
TopBeginTime datetime default getdate() NOT NULL , --置顶开始时间
TopEndTime datetime default getdate() NOT NULL , --置顶结束时间
Title varchar(100) default '' NOT NULL , --标题
KeyWorld varchar(150) default '' NOT NULL , --关键字
Summary varchar(680) default '' NOT NULL , --简介//680为微信文字上限左右
Content ntext default '' NOT NULL , --内容
Source varchar(50) default '独家原创' NOT NULL , --来源
CreateTime datetime default getdate() NOT NULL , --创建时间
PublishTime datetime default getdate() NOT NULL , --发布时间
AOrder int default 99 NOT NULL , --排序
State int default 1 NOT NULL , --状态
MinImg varchar(350) default '' NOT NULL , --缩略图
); if exists ( select * from sysobjects where name = 'tb_ArtSort' and xtype='U')
drop table tb_ArtSort
create table tb_ArtSort---------------------------------------------------------文章分类表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
Name varchar(50) default '' NOT NULL , --名称
ParentId int default 0 NOT NULL , --父级ID
IndexLevel int default 1 NOT NULL , --当前级别
SOrder int default 99 NOT NULL , --排序
State int default 1 NOT NULL , --状态
Note varchar(150) default '' NOT NULL , --备注
); if exists ( select * from sysobjects where name = 'tb_KeyWord' and xtype='U')
drop table tb_KeyWord
create table tb_KeyWord---------------------------------------------------------关键字表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
Name varchar(50) default '' NOT NULL , --名称
Note varchar(250) default '' NOT NULL , --备注
State int default 1 NOT NULL , --状态
CreateTime datetime default getdate() NOT NULL , --创建时间
ReType int default 1 NOT NULL , --回复消息类型1为文本
); if exists ( select * from sysobjects where name = 'tb_KeyContent' and xtype='U')
drop table tb_KeyContent
create table tb_KeyContent------------------------------------------------------关键字返回内容表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
Title varchar(150) default '' NOT NULL , --标题
Content varchar(700) default '' NOT NULL , --内容
KeyId int default 0 NOT NULL , --关键字ID
Type int default 1 NOT NULL , --类型-文本图文等
MinImg varchar(250) default '' NOT NULL , --图片
ITop int default 0 NOT NULL , --置顶
TopBeginTime datetime default getdate() NOT NULL , --置顶开始时间
TopEndTime datetime default getdate() NOT NULL , --置顶结束时间
CreateTime datetime default getdate() NOT NULL , --创建时间
State int default 1 NOT NULL , --状态
Href varchar(250) default '#' NOT NULL , --图文时点开的链接
); if exists ( select * from sysobjects where name = 'tb_UserMsg' and xtype='U')
drop table tb_UserMsg
create table tb_UserMsg---------------------------------------------------------用户消息记录表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
MsgType int default 1 NOT NULL , --消息类型文本、事件
EventId int default 1 NOT NULL , --事件ID//自定义菜单的ID
Content varchar(700) default '' NOT NULL , --消息内容
CreateTime datetime default getdate() NOT NULL , --创建时间
State int default 1 NOT NULL , --状态
ReState int default 0 NOT NULL , --回复状态
WeiMsgId varchar(50) default '' NOT NULL , --微信消息ID
UserId int default 0 NOT NULL , --用户表主键
); if exists ( select * from sysobjects where name = 'tb_245' and xtype='U')
drop table tb_245
create table tb_245-------------------------------------------------------------回复消息表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
UserId int default 0 NOT NULL , --用户表主键
MsgID int default 0 NOT NULL , --消息表主键
ReType int default 1 NOT NULL , --回复类型//文本图文
ReFrom int default 1 NOT NULL , --回复点//1文章2关键词
ReContentId varchar(80) default '0,' NOT NULL , --回复的内容ID串
CreateTime datetime default getdate() NOT NULL , --回复记录时间
); if exists ( select * from sysobjects where name = 'tb_PersonalMenu' and xtype='U')
drop table tb_PersonalMenu
create table tb_PersonalMenu----------------------------------------------------自定义菜单表
(
ID int primary key identity(1,1) NOT NULL , --主键-主键
Name varchar(50) default '' NOT NULL , --名称
Type int default 1 NOT NULL , --类型1click2view
ParentId int default 0 NOT NULL , --父级ID
IndexLevel int default 1 NOT NULL , --当前级别
LinkUrl varchar(350) default '#' NOT NULL , --链接地址view时用
CreateTime datetime default getdate() NOT NULL , --创建时间
POrder int default 99 NOT NULL , --排序
State int default 1 NOT NULL , --状态
Note varchar(150) default '' NOT NULL , --备注
);

第一步数据库设计就到这里结束了, 后续开始项目的代码旅程...

[c#]asp.net开发微信公众平台(1)数据库设计的更多相关文章

  1. [C#]asp.net开发微信公众平台----目录汇总-持续更新

    1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...

  2. [c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单

    前7篇把最基础的消息接收和回复全做完了,  也把高级接口的入口和分拆处理写好了空方法,  此篇接着介绍微信的9大高级接口, 并着重讲解其中的自定义菜单. 微信9大接口为: 1.语音识别接口 2.客服接 ...

  3. [c#]asp.net开发微信公众平台(7)前6篇的整体框架demo源码

    这里给出的demo是具备整体框架的微信公众平台源码, 所谓demo就是拿过去就可以直接演示使用的东西,  当然不会具备非常详细的具体到业务层面.数据层面的东西, 每个人都可以在此基础上自由发挥,  只 ...

  4. [c#]asp.net开发微信公众平台(6)阶段总结、服务搭建、接入

    经过前5篇,跟着一步步来的话,任何人都能搭建好一个能处理各种微信消息的框架了,总结一下最容易忽略的问题: 1.文本消息中可以使用换行符\n    : 2.微信发来的消息中带的那个长整型的时间,我们完全 ...

  5. [c#]asp.net开发微信公众平台(5)微信图文消息

    上篇已经成功响应了关注事件,也实现了文本消息的发送,这篇开始图文消息处理, 微信中最常用的消息类型就是图文消息了,因为它图文并茂,最能表达信息. 图文消息在微信中的接口定义如下: <xml> ...

  6. asp.net开发微信公众平台----目录汇总-持续更新

    1.[c#]asp.net微信公众平台开发(1)数据库设计 2.[c#]asp.net微信公众平台开发(2)多层架构框架搭建和入口实现 3.[c#]asp.net微信公众平台开发(3)微信消息封装及反 ...

  7. [c#]asp.net开发微信公众平台(4)关注事件、用户记录、回复文本消息

    上一篇已经把所有消息封装且都各自有方法处理了,这篇从使用第一步——关注开始,  关注之后进行消息记录,同时回复文本消息给用户,关注方法:DoSub,另外新用户扫描带参数的二维码关注方法:DoCodeN ...

  8. [c#]asp.net开发微信公众平台(3)微信消息封装及反射赋值

    上一篇已经搭建好整体框架,实现了入口的验证,   验证通过后就交给LookMsgType方法处理,LookMsgType方法主要是对微信发来的不同的消息进行分解,不同的类型交给业务逻辑层不同的方法处理 ...

  9. [c#]asp.net开发微信公众平台(2)多层架构框架搭建和入口实现

    上篇已经设计出比较完善的数据库了,这篇开始进入代码.  首先把上篇设计的数据库脚本在数据库中执行下,生成数据库,然后在VS中建立项目,为了方便理解和查看,我设计的都是很直白的类名和文件名,没有命名空间 ...

随机推荐

  1. spring mvc 自定义Handlermapping

    上次大概写了个可以解决velocity 多视图的东西. 但是实际运用过程中又到处找了些资料看了下.这里 小计下: DispatcherServlet解析过程: ..1..HandlerMapping. ...

  2. JavaScript语言内置对象

    String(字符串对象)RegExp(正则表达式对象)Number(数字对象)Math(数学对象)Function(函数对象)Error(异常对象)Date(日期/时间对象)Boolean(布尔对象 ...

  3. Matrix(线段树版)

    poj2155:http://poj.org/problem?id=2155 题意;同上一遍随笔. 题解:这里用二维线段树打了一发.第一次学习别人的代码.才学的.这种树套树的程序,确实很费脑子,一不小 ...

  4. Keil C51库函数原型列表

    //1. CTYPE.H bit isalnum(char c): bit isalpha(char c): bit iscntrl(char c): bit isdigit(char c): bit ...

  5. android环境下两种md5加密方式

    在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md ...

  6. 【HDOJ】1276 士兵队列训练问题

    初看这道题目很像尤瑟夫问题, 区别是每次都是从1开始.解法也很类似.数学解递推公式.假定第K次报数后,余下人数不超过3个人.若第K次为1-3报数,那么由这三个数的当前索引n可推上一次报数之前的编号为n ...

  7. Semaphore — Windows API

    Semaphore是旗语的意思,在Windows中,Semaphore对象用来控制对资源的并发访问数.Semaphore对象具有一个计数值,当值大于0时,Semaphore被置信号,当计数值等于0时, ...

  8. libvirt 命令行交互工具之virsh

    libvirt是当前主流VM最低层库.IBM PowerVM也不例外,libvirt是深入玩虚拟化必须玩转的东西; 简单测试玩玩libvirt 的virsh命令行交互工具, 你我都知libvirt大体 ...

  9. 封装实现UIButton左文字右图片

    #import "TitleButton.h" @implementation TitleButton - (instancetype)initWithFrame:(CGRect) ...

  10. TreeSet具体应用

    知识是用来运用的,一辈子用不上的等于没学,学了忘了的等于没学,学了不会用的等于没学 //TreeSetDemo2.java package saturday2; import java.util.Ha ...