开发微信公众平台之前,先去微信官方了解下大概的情况 这里:http://mp.weixin.qq.com/wiki/index.php ;看了之后心里大致有数了,开始设计数据库,尽可能的考虑,未考虑到的,以后再补充。
1、首先是用户部分,根据微信官方的接口结合实际运用,用户部分有3个表:用户表、用户资料表、用户分组表,我设计的如下:
2、用户设计好之后就是文章部分,包括:文章分类表、文章表, 设计如下:
3、有了用户相关的表我们可以保存用户,有了文章模块的表我们可以根据用户输入的信息查询文章进行返回(返回文本、图文、图片、音乐、视频、语音等等),但是实际运用中,我们存在需要指定特定的关键字返回特定的内容的情况,那么就需要专门的特定关键字模块, 包括:关键字表、关键字返回的内容表, 这里的内容表看着像是与上面的文章表有重合,实则不然, 这里是特定关键字指定的回复内容,可以指定返回文本、图文或其他多媒体信息,当返回多媒体信息时内容中存入文件地址, 上面的文章表是标准的通用的文章内容表, 供用户查询多数情况下直接返回图文信息,且图文信息点击链接时就是这篇文章对应的展示地址, 相当于一个微网站, 所以文章和这个关键字的内容表分开设计更加方便管理。 设计如下:
4、消息记录, 把用户发来的消息进行记录,方便后续处理, 比如 根据用户上次发来的事件消息,之后再发同一个关键词时,返回对应菜单下的内容,而不用用户每次发送消息都带对应的菜单选项;客服消息根据记录的信息做个性化的服务 等等。 包括:用户发来的消息记录表、回复给用户的消息记录表 ,有了这些可以完整的还原和用户的对话,这里是记录和用户交流的过程,具体用户发来的消息需要返回什么样的消息,由项目代码中业务决定。 设计如下:
5、自定义菜单,创建和管理微信公众平台中的自定义菜单,设计如下:
6、其他, 具体根据做的实际项目来设计, 比如 用户分析、访问统计; 用户积分; 二维码相关 等等 , 此处先不设计。
以上设计中,有一些是没有设计到数据库的, 比如关键字模块中的回复消息类型、消息记录中的消息类型, 这些固定不变(由腾讯决定)的少量的单选项形式的数据,我们在具体项目中使用其他方法来实现(固定静态、配置文件、缓存等),无需设计数据库。
完整设计如下:(为了方便截图 ,我把各个模块的表拖动覆盖了)
下载脚本,如下:在数据库中创建一个名为微信(设计数据库时自己定义的)的数据库,脚本执行一下就OK,
1 use weixin -------微信公众平台
2 if exists ( select * from sysobjects where name = 'tb_User' and xtype='U')
3 drop table tb_User
4 create table tb_User------------------------------------------------------------用户表
5 (
6 ID int primary key identity(1,1) NOT NULL , --主键-主键
7 InId int default 0 NOT NULL , --自有系统的用户ID
8 OpenId varchar(150) default '' NOT NULL , --微信openid
9 Group int default 0 NOT NULL , --分组ID
10 NickName varchar(50) default '' NOT NULL , --昵称-微信
11 CreateTime datetime default getdate() NOT NULL , --创建时间
12 State int default 1 NOT NULL , --状态-1为正常
13 PreFirst varchar(150) default '' NOT NULL , --预留字段1
14 );
15
16
17 if exists ( select * from sysobjects where name = 'tb_Group' and xtype='U')
18 drop table tb_Group
19 create table tb_Group-----------------------------------------------------------分组表
20 (
21 ID int primary key identity(1,1) NOT NULL , --主键-主键
22 Name varchar(50) default '' NOT NULL , --名称-本地
23 WeiId int default 0 NOT NULL , --对应微信分组ID
24 WeiName varchar(50) default '' NOT NULL , --微信分组名
25 Note varchar(100) default '' NOT NULL , --备注
26 CreateTime datetime default getdate() NOT NULL , --创建时间
27 State int default 1 NOT NULL , --状态
28 );
29
30
31 if exists ( select * from sysobjects where name = 'tb_UserData' and xtype='U')
32 drop table tb_UserData
33 create table tb_UserData--------------------------------------------------------用户资料表
34 (
35 ID int primary key identity(1,1) NOT NULL , --主键-主键
36 UserId int default 0 NOT NULL , --用户表主键
37 Sex int default 0 NOT NULL , --性别0未知1男2女
38 City varchar(20) default '' NOT NULL , --城市
39 Country varchar(30) default '' NOT NULL , --国家
40 Province varchar(20) default '' NOT NULL , --省份
41 Language varchar(15) default '' NOT NULL , --语言
42 HeadImgUrl varchar(250) default '' NOT NULL , --用户头像
43 SubTime varchar(50) default '' NOT NULL , --最后次关注时间戳
44 CreateTime datetime default getdate() NOT NULL , --创建时间
45 State int default 1 NOT NULL , --状态
46 PreFirst varchar(150) default '' NOT NULL , --预留1
47 );
48
49
50 if exists ( select * from sysobjects where name = 'tb_Article' and xtype='U')
51 drop table tb_Article
52 create table tb_Article---------------------------------------------------------文章表
53 (
54 ID int primary key identity(1,1) NOT NULL , --主键-主键
55 SortId int default 0 NOT NULL , --类别ID
56 ITop int default 0 NOT NULL , --置顶0不1是
57 TopBeginTime datetime default getdate() NOT NULL , --置顶开始时间
58 TopEndTime datetime default getdate() NOT NULL , --置顶结束时间
59 Title varchar(100) default '' NOT NULL , --标题
60 KeyWorld varchar(150) default '' NOT NULL , --关键字
61 Summary varchar(680) default '' NOT NULL , --简介//680为微信文字上限左右
62 Content ntext default '' NOT NULL , --内容
63 Source varchar(50) default '独家原创' NOT NULL , --来源
64 CreateTime datetime default getdate() NOT NULL , --创建时间
65 PublishTime datetime default getdate() NOT NULL , --发布时间
66 AOrder int default 99 NOT NULL , --排序
67 State int default 1 NOT NULL , --状态
68 MinImg varchar(350) default '' NOT NULL , --缩略图
69 );
70
71
72 if exists ( select * from sysobjects where name = 'tb_ArtSort' and xtype='U')
73 drop table tb_ArtSort
74 create table tb_ArtSort---------------------------------------------------------文章分类表
75 (
76 ID int primary key identity(1,1) NOT NULL , --主键-主键
77 Name varchar(50) default '' NOT NULL , --名称
78 ParentId int default 0 NOT NULL , --父级ID
79 IndexLevel int default 1 NOT NULL , --当前级别
80 SOrder int default 99 NOT NULL , --排序
81 State int default 1 NOT NULL , --状态
82 Note varchar(150) default '' NOT NULL , --备注
83 );
84
85
86 if exists ( select * from sysobjects where name = 'tb_KeyWord' and xtype='U')
87 drop table tb_KeyWord
88 create table tb_KeyWord---------------------------------------------------------关键字表
89 (
90 ID int primary key identity(1,1) NOT NULL , --主键-主键
91 Name varchar(50) default '' NOT NULL , --名称
92 Note varchar(250) default '' NOT NULL , --备注
93 State int default 1 NOT NULL , --状态
94 CreateTime datetime default getdate() NOT NULL , --创建时间
95 ReType int default 1 NOT NULL , --回复消息类型1为文本
96 );
97
98
99 if exists ( select * from sysobjects where name = 'tb_KeyContent' and xtype='U')
100 drop table tb_KeyContent
101 create table tb_KeyContent------------------------------------------------------关键字返回内容表
102 (
103 ID int primary key identity(1,1) NOT NULL , --主键-主键
104 Title varchar(150) default '' NOT NULL , --标题
105 Content varchar(700) default '' NOT NULL , --内容
106 KeyId int default 0 NOT NULL , --关键字ID
107 Type int default 1 NOT NULL , --类型-文本图文等
108 MinImg varchar(250) default '' NOT NULL , --图片
109 ITop int default 0 NOT NULL , --置顶
110 TopBeginTime datetime default getdate() NOT NULL , --置顶开始时间
111 TopEndTime datetime default getdate() NOT NULL , --置顶结束时间
112 CreateTime datetime default getdate() NOT NULL , --创建时间
113 State int default 1 NOT NULL , --状态
114 Href varchar(250) default '#' NOT NULL , --图文时点开的链接
115 );
116
117
118 if exists ( select * from sysobjects where name = 'tb_UserMsg' and xtype='U')
119 drop table tb_UserMsg
120 create table tb_UserMsg---------------------------------------------------------用户消息记录表
121 (
122 ID int primary key identity(1,1) NOT NULL , --主键-主键
123 MsgType int default 1 NOT NULL , --消息类型文本、事件
124 EventId int default 1 NOT NULL , --事件ID//自定义菜单的ID
125 Content varchar(700) default '' NOT NULL , --消息内容
126 CreateTime datetime default getdate() NOT NULL , --创建时间
127 State int default 1 NOT NULL , --状态
128 ReState int default 0 NOT NULL , --回复状态
129 WeiMsgId varchar(50) default '' NOT NULL , --微信消息ID
130 UserId int default 0 NOT NULL , --用户表主键
131 );
132
133
134 if exists ( select * from sysobjects where name = 'tb_245' and xtype='U')
135 drop table tb_245
136 create table tb_245-------------------------------------------------------------回复消息表
137 (
138 ID int primary key identity(1,1) NOT NULL , --主键-主键
139 UserId int default 0 NOT NULL , --用户表主键
140 MsgID int default 0 NOT NULL , --消息表主键
141 ReType int default 1 NOT NULL , --回复类型//文本图文
142 ReFrom int default 1 NOT NULL , --回复点//1文章2关键词
143 ReContentId varchar(80) default '0,' NOT NULL , --回复的内容ID串
144 CreateTime datetime default getdate() NOT NULL , --回复记录时间
145 );
146
147
148 if exists ( select * from sysobjects where name = 'tb_PersonalMenu' and xtype='U')
149 drop table tb_PersonalMenu
150 create table tb_PersonalMenu----------------------------------------------------自定义菜单表
151 (
152 ID int primary key identity(1,1) NOT NULL , --主键-主键
153 Name varchar(50) default '' NOT NULL , --名称
154 Type int default 1 NOT NULL , --类型1click2view
155 ParentId int default 0 NOT NULL , --父级ID
156 IndexLevel int default 1 NOT NULL , --当前级别
157 LinkUrl varchar(350) default '#' NOT NULL , --链接地址view时用
158 CreateTime datetime default getdate() NOT NULL , --创建时间
159 POrder int default 99 NOT NULL , --排序
160 State int default 1 NOT NULL , --状态
161 Note varchar(150) default '' NOT NULL , --备注
162 );
View Code
第一步数据库设计就到这里结束了, 后续开始项目的代码旅程...