Mobile Service 是利用 Drupal 所開發出來的平台,Mobile Service 提供後台讓各單位人員可以註冊以及登入至系統發佈新聞等訊息,並且將這些訊息在前台顯示出來,除此之外也提供了校園單位簡介地理位置等資訊。
既然平台是利用 Drupal 所開發,所以要拉取資料庫的資料前,必須先來看一下各個資料存放於哪些資料表中。基本上與之前介紹的位置相似,可參
考關於Drupal新增content時的資料表變動、Map 功能用到的 Drupal 資料 此兩篇介紹。
首先來看一下我對於 Mobile Service 所作的資料分類,目前的資料分類是依照新聞發佈、行事曆 以及部分地圖功能所做規劃。( 這裡為什麼說是部分的地圖功能,原因在於這部分只是存放發佈訊息及活動的位置,完整的地圖功能將包含了各類型單位、公車資訊等 )。
Type | Field | 功能說明 |
building
(建築物) |
|
|
name
| 建物名稱 |
Floor
| 建物樓層 |
introduction
| 建物簡介 |
latitude
| 緯度 |
longitude
| 精度 |
units
(單位或院所) |
|
|
atBuilding
| 所在建物 |
name
| 單位名稱 |
atFloor
| 所在樓層 |
introduction
| 單位簡介 |
number
| 單位室碼 |
phone
| 單位電話 |
fax
| 單位傳真 |
web
| 單位網址 |
type | 單位類型(學術、行政) |
hasGroup | 是否有組別 |
group
(組別或系所) | atBuilding
| 所在建物 |
name
| 組別名稱 |
atFloor
| 所在樓層 |
atUnits | 所在組別 |
introduction
| 組別簡介 |
number
| 組別室碼 |
phone
| 組別電話 |
fax
| 組別傳真 |
web
| 組別網址 |
member
(成員) |
|
|
atUnits
| 所屬單位或組別 |
name
| 成員姓名 |
title | 職稱 |
phone
| 成員電話(分機) |
news
(新聞) |
|
|
pUnits
| 發佈單位或組別 |
pMember
| 發佈成員 |
title
| 新聞標題 |
content
| 新聞內容 |
date
| 發佈日期 |
time
| 發佈時間 |
mediaUrl
| 多媒體檔連結位置 |
mSource
| 多媒體檔來源 |
mediaType
| 多媒體檔類型 |
events
(事件 – 行事曆用) |
|
|
pMember
| 發佈人員 |
pUnits
| 發佈單位或組別 |
title
| 事件標題 |
content
| 事件內容 |
pDate
| 發佈日期 |
pTime
| 發佈時間 |
aDate
| 活動日期 |
aTime
| 活動時間 |
aPlace
| 活動地點 |
alatitude
| 活動地點座標緯度 |
alongitude
| 活動地點座標精度 |
mediaUrl
| 多媒體檔連結位置 |
mSource
| 多媒體檔來源 |
mediaType
| 多媒體檔類型 |
此表為目前規畫在 Drupal 上的資料分類 (請注意這
並非資料庫中實際的資料表或欄位 ),目的是為了新聞發佈及行事曆兩項功能,基本的功能都已經在表上有描述,此處將不再敘述,接下來將記錄實際在 Drupal 上的資料庫位置。
目前 Mobile Service 上共有 130 個資料表,同樣的這些資料表大多數是 Drupal 所必須使用;而此處因為有特別為了可以直接拉取資料庫而做分類與設計,所以在位置上較不會分散在各處。
常用到的資料表有 node, node_revisions, node_type, users, users_roles, role, permission, content_type_* 。
users, users_roles, role, permission 這四個資料表可以讓我們取得註冊者與系統權限及 uid 等關聯,並且在資料分類中設計了 member 的類型後,更可以利用 content_type_member.nid 來將各單位的人員與系統帳號做綁定的動作,如此一來,雖然發佈新聞或是其他訊息時系統看的是 uid 以及 系統權限 rid ,但是在前台或是其他自行由資料庫抓取資料的平台時,可以清楚顯示發佈者是哪個單位的成員,並且利用綁定的動作來做行動裝置上的權限控管,方便未來行動裝置上發佈功能的開發。
至於上面表中的各個 type 對應到資料庫中的資料表分別為 content_type_
building, content_type_
units, content_type_
group, content_type_
member, content_type_
news, content_type_
events。而這邊的設計概念十分簡單,由大至小,大的包含數個小的。
建築物 > 單位院所 > 組別系所 > 成員 > 新聞、行事曆
我們不管取得哪個部份的資訊,都可以經由 at* 或是
pMember 這兩個 field 取得更上面層級的資料,經由此步驟就可以一路的追尋回去,取得所在位置、樓層或是相關簡介等,如此也可以在地圖上標示此訊息的發佈位置;當活動資訊內無活動地點的經緯度時,也可以利用活動地點 aPlace 這個 field 來向上追朔取得地標。
和之前所使用的生活資訊平台相比較,經由這樣簡單的設計可以減少建構資料時必須輸入大量重複的資料,也讓使用者也就是訊息發佈者可以減少輸入的資料量,同時也兼顧了部分的關聯問題,以減少需要特定資料時多餘的運算步驟。
至於要如何利用 Drupal 所建立的資料庫,要求特定的資料這邊就不再贅述了,可以參考關於Drupal新增content時的資料表變動、Map 功能用到的 Drupal 資料以及配合此表的介紹就可以編寫出需要的 SQL 指令。