第四章 系統設計與實作
4.2 伺服器端之系統設計
4.2.3 資料庫結構
在伺服器端,我們以資料庫作為儲存使用者資訊、聯絡人資訊、聯絡人管理資訊以 及上線狀態的媒介。考量到國際化的方便,資料庫中所有文字資料都以 Unicode UTF-8 格式儲存,而時間資料則以格林威治標準時間(GMT)為準。如此不同語系不同時區的使 用者,可有一個共同的基準來進行資料的存取以及同步。
我們依據需求規劃出表格結構:
為使用者資訊表格 USER_PROFILES,重要欄位說明如下:UID 是一 33 字元之使用 者編號,在系統新增使用者時自動產生並指派。用以識別每一位使用者,以及從其他表 格中取出關連於該使用者的資訊;USERNAME 與 PASSWORD 是使用者登入之帳號與密碼,
其中 PASSWORD 是以單向加密儲存於表格中;PREFERENCE 則儲存使用者的偏好設定。
表1 使用者資訊
User_Profiles
Field Data type Description
UID CHAR (33) 使用者編號 明如下:SESSION_ID 是 PHP 之登入階段(session)機制產生之 32 字元之使用者編號,在 使 用 者 登 入 時 產 生 , 登 出 或 逾 時 時 消 滅 。 UID 是 使 用 者 的 編 號 , 而 時 間 戳 記 LAST_ACTIVITY_TIME 記錄了使用者上次活動的時間。當使用者對伺服器做任何請 求、或是執行 keep alive 動作時,此時間戳記會更新為當時的伺服器時間。系統用以判 斷某個使用者登入階段是否逾時,以進行必要的處理。
表2 使用者活動狀態
User_Activities
Field Data type Description
SESSION_ID CHAR (32) 登入階段編號
UID CHAR (33) 使用者編號
LAST_ACTIVITY_TIME TIMESTAMP 使用者上次活動的時間
為聯絡人資訊表格,重要欄位說明如下:CID即4.2.2描述之Contact ID;UID為 LAST_MODIFICATION_TIME改變為目前時間。
MSN_STATUS 與 SYKPE_STATUS 記錄了該聯絡人之上線狀態,這兩個欄位可能的 內容根據 MSN Messenger 與 Skype 的官方設定,列於錯誤! 找不到參照來源。,在聯絡 人上線狀態不明時(如使用者未登入)會設為 MSN_UNKNOWN、SKYPE_UNKNOWN。
表3 聯絡人資訊
Contacts
Field Data type Description
CID CHAR (34) 聯絡人編號(Contact ID, CID) UID CHAR (33) 使用者編號
GIVEN_NAME CHAR (32) 聯絡人名 SURNAME CHAR (32) 聯絡人姓 TELEPHONE_NUMBER CHAR (32) 一般電話號碼 CELLPHONE_NUMBER CHAR (32) 行動電話號碼 FAX_NUMBER CHAR (32) 傳真號碼
ADDRESS_COUNTRY CHAR (128) 聯絡地址:國家 ADDRESS_STATE_OR
_PROVINCE CHAR (128) 聯絡地址:洲/省、台灣則視為縣 市
Contacts
Field Data type Description
ADDRESS_CITY CHAR (128) 聯絡地址:城市,台灣則視為鄉 鎮市區
ADDRESS_STREET CHAR (255) 聯絡地址:街道地址 EMAIL CHAR (255) 電子郵件帳號
MSN CHAR (255) MSN Messenger 帳號 SKYPE CHAR (255) Skype 帳號
LAST_MODIFICATION
_TIME TIMESTAMP 該聯絡人資訊最後被修改的時間 MSN_STATUS CHAR(16) 聯絡人的MSN Messenger 上線
狀態
SKYPE_STATUS CHAR(16) 聯絡人的Skype 上線狀態
為群組資訊表格,重要欄位說明如下:GID是4.2.2描述之Group ID;UID為
之使用者之編號,用以區別該筆群組資料是屬與哪一位使用者所有。NAME是群組 的名稱。LAST_MODIFICATION_TIME是4.2.2描述之最後修改時間戳記,在改變群組名 稱,或群組內含元素時,此時間戳記會被改變為伺服器當時之時間。
表4 群組資訊
Groups
Field Data type Description
GID CHAR (34) 群 組 編 號 (Group ID, GID)
UID CHAR (33) 使用者編號
NAME CHAR (128) 群組名稱
LAST_MODIFICATION_TIME TIMESTAMP 群組最後修改時間
為群組內容表格,每一筆資料代表一個群組的元素,重要欄位說明如下:UID為
之使用者之編號,用以區別該筆群組內容資料是屬與哪一位使用者所有。GID 為 某個群組之 Group ID;ID 則是 GID 所內含之某個群組元素 ID 值,可以是 GID 也可以 是 UID。舉例而言,若某個使用者 UIDi 群組 GIDA 中有兩個子群組 GIDB 以及 GIDC,
還 有 一 個 聯 絡 人 CID1 , 則 在 表 格 中 會 以 三 筆 紀 錄 表 示 : (UIDi,GIDA,GIDB) 、 (UIDi,GIDA,GIDC)、(UIDi,GIDA,CID1)。
表5 群組內容
Group_Entries
Field Data type Description
UID CHAR (33) 使用者編號
GID CHAR (34) 群組編號(Group ID, GID)
ID CHAR (34) 群組元素編號