開發微信公衆平臺以前,先去微信官方瞭解下大概的狀況 這裏:http://mp.weixin.qq.com/wiki/index.php ;看了以後內心大體有數了,開始設計數據庫,儘量的考慮,未考慮到的,之後再補充。php
一、首先是用戶部分,根據微信官方的接口結合實際運用,用戶部分有3個表:用戶表、用戶資料表、用戶分組表,我設計的以下:數據庫
二、用戶設計好以後就是文章部分,包括:文章分類表、文章表, 設計以下:緩存
三、有了用戶相關的表咱們能夠保存用戶,有了文章模塊的表咱們能夠根據用戶輸入的信息查詢文章進行返回(返回文本、圖文、圖片、音樂、視頻、語音等等),可是實際運用中,咱們存在須要指定特定的關鍵字返回特定的內容的狀況,那麼就須要專門的特定關鍵字模塊, 包括:關鍵字表、關鍵字返回的內容表, 這裏的內容表看着像是與上面的文章表有重合,實則否則, 這裏是特定關鍵字指定的回覆內容,能夠指定返回文本、圖文或其餘多媒體信息,當返回多媒體信息時內容中存入文件地址, 上面的文章表是標準的通用的文章內容表, 供用戶查詢多數狀況下直接返回圖文信息,且圖文信息點擊連接時就是這篇文章對應的展現地址, 至關於一個微網站, 因此文章和這個關鍵字的內容表分開設計更加方便管理。 設計以下:微信
四、消息記錄, 把用戶發來的消息進行記錄,方便後續處理, 好比 根據用戶上次發來的事件消息,以後再發同一個關鍵詞時,返回對應菜單下的內容,而不用用戶每次發送消息都帶對應的菜單選項;客服消息根據記錄的信息作個性化的服務 等等。 包括:用戶發來的消息記錄表、回覆給用戶的消息記錄表 ,有了這些能夠完整的還原和用戶的對話,這裏是記錄和用戶交流的過程,具體用戶發來的消息須要返回什麼樣的消息,由項目代碼中業務決定。 設計以下:微信公衆平臺
五、自定義菜單,建立和管理微信公衆平臺中的自定義菜單,設計以下:數據庫設計
六、其餘, 具體根據作的實際項目來設計, 好比 用戶分析、訪問統計; 用戶積分; 二維碼相關 等等 , 此處先不設計。ide
以上設計中,有一些是沒有設計到數據庫的, 好比關鍵字模塊中的回覆消息類型、消息記錄中的消息類型, 這些固定不變(由騰訊決定)的少許的單選項形式的數據,咱們在具體項目中使用其餘方法來實現(固定靜態、配置文件、緩存等),無需設計數據庫。網站
完整設計以下:(爲了方便截圖 ,我把各個模塊的表拖動覆蓋了)spa
下載腳本,以下:在數據庫中建立一個名爲微信(設計數據庫時本身定義的)的數據庫,腳本執行一下就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 );
第一步數據庫設計就到這裏結束了, 後續開始項目的代碼旅程...