讀古今文學網 > 微信公眾平台開發:從零基礎到ThinkPHP5高性能框架實踐 > 24.5.1 數據庫設計 >

24.5.1 數據庫設計

一般來說,在大轉盤抽獎系統中至少需要包含以下表。

·全局配置表:用於存儲系統的配置信息。

·獎品配置表:用於存儲獎品名稱及數量等信息。

·用戶信息表:用於記錄參加活動的用戶信息。

·抽獎記錄表:用於記錄用戶參加的活動的行為。

在數據庫設置之前,需要創建一個數據庫,這裡數據庫的名稱為「wx_dazhuanpan」。其中,「wx」是「微信」拼音的首字母,「dazhuanpan」則是「大轉盤」的拼音。

在phpMyAdmin的後台中,選擇Databases(數據庫)標籤,然後在Create Database(創建數據庫)功能框中輸入數據庫的名稱「wx_dazhuanpan」,編碼類型選擇utf8_general_ci,最後點擊Create(創建)按鈕,如圖24-12所示。

圖24-12 創建數據庫

創建好數據庫之後,開始建表。

一般來說,一個活動的開展總是有開始時間和結束時間的,這也是系統開發過程中要考慮的。另外,由於這是一個抽獎活動,而抽獎活動不可能給用戶無限次的抽獎機會,所以還需要做一個抽獎次數限制。

下面定義了一個配置表,該配置表用於存儲上述配置內容。該表的建表腳本如下。


DROP TABLE IF EXISTS 'wx_config';
CREATE TABLE IF NOT EXISTS 'wx_config' (
    'id' int(5) NOT NULL,
    'starttime' varchar(30) NOT NULL,
    'endtime' varchar(30) NOT NULL,
    'maxtimes' varchar(5) NOT NULL,
    PRIMARY KEY  ('id')
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  

用戶可以使用phpMyAdmin的數據庫後台的創建表格功能來建立這個表,依次填寫表名及各個字段名稱、類型及其他屬性,如圖24-13所示。

圖24-13 創建表

另外,也可以直接在SQL運行框上使用上述腳本來建表,如圖24-14所示。

圖24-14 運行SQL腳本

建表後,全局配置表如圖24-15所示。

圖24-15 表格創建成功

獎品配置表用於存儲獎品信息,這些信息包括獎品名稱、獎品數量及中獎概率。

建表的SQL腳本如下。


DROP TABLE IF EXISTS 'wx_award';
CREATE TABLE IF NOT EXISTS 'wx_award' (
    'id' int(10) unsigned NOT NULL AUTO_INCREMENT,
    'name' varchar(50) NOT NULL COMMENT '獎品名稱',
    'total' int(11) NOT NULL COMMENT '數量',
    'prob' varchar(20) NOT NULL,
    PRIMARY KEY ('id')
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  

獎品配置表建成之後,如圖24-16所示。

圖24-16 獎品配置表

用戶信息表主要用於存儲用戶的個人信息,這些信息包括微信OpenID、用戶姓名、用戶手機號。

建表的SQL腳本如下。


DROP TABLE IF EXISTS 'wx_user';
CREATE TABLE IF NOT EXISTS 'wx_user' (
    'id' int(6) NOT NULL auto_increment,
    'openid' varchar(30) NOT NULL,
    'name' varchar(16) NOT NULL,
    'mobile' varchar(15) NOT NULL,
    PRIMARY KEY  ('id'),
    UNIQUE KEY 'openid' ('openid')
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  

為了防止同一個人多次重複提交而導致出錯,可對openid設置唯一性約束,這樣可以避免出現同一人多次重複提交個人信息成功的情況。對於一些潛在的隱患,應該盡早在設計時就防患於未然。

用戶信息表建好後,如圖24-17所示。

抽獎記錄表主要用於存儲用戶的抽獎記錄,這些信息包括微信OpenID、獎品等級、抽獎日期、領獎狀態。

圖24-17 用戶信息表

建表的SQL腳本如下。


DROP TABLE IF EXISTS 'wx_winner';
CREATE TABLE IF NOT EXISTS 'wx_winner' (
    'id' int(10) unsigned NOT NULL auto_increment,
    'openid' varchar(30) NOT NULL,
    'award' varchar(100) NOT NULL COMMENT '獎品等級',
    'getdate' varchar(20) NOT NULL,
    'status' tinyint(1) NOT NULL default '0' COMMENT '0未領獎,1已領獎',
    PRIMARY KEY  ('id')
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  

抽獎記錄表建好後,如圖24-18所示。

圖24-18 抽獎記錄表

最終數據庫中建好了4個表,如圖24-19所示。

圖24-19 所有表格