• 沒有找到結果。

第四章 系統實作與評估

4.1 系統實作展示

4.1.2 多租戶應用程式範例系統設計與實作

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

50

學校數量不只一個,可能有兩間以上的學校。每間學校可以新增、更改其 課程資訊或是客製化其部份資料表欄位以及查詢部分統計資訊。

3. 使用選課系統進行選課的學生:意指租戶的學生,也是進行選課的學生。

選課系統提供帳戶管理讓學生進行註冊、登入、查詢課程、在選課清單上 加入或移除課程以及排列選課志願順序等動作。

4.1.2 多租戶應用程式範例系統設計與實作

在資料層級設計方面,選課系統維運管理者根據一般選課系統的需求,擬 訂共用資料表的資料表綱要。以下為該系統的三個共用資料表說明以及資料表 綱要展示(schema)(圖 4.1):

(1) StudentInfoCommonFields:此資料表用來儲存所有學校的學生基本資 料(僅含共有欄位部份)。

(2) SelectCourseCommonFields:此資料表用來儲存所有學校其每位學生 的選課記錄(僅含共有欄位部份)。

(3) CourseInfoCommonFields:此資料表用來儲存所有學校的課程資料(僅 含共有欄位部份)。

圖 4.1 多校(租戶)選課系統的範例之共用資料表(StudentInfoCommonFields、

SelectCourseCommonFields 以及 CourseInfoCommonFields)的資料表綱要設計。

選課系統維運管理者必須撰寫 CREATE 語句在資料庫中建立這三個共有資料 表,同時,對共有欄位設定一些限制(圖 4.2)。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

51

圖 4.2 CREATE 語句範例展示-建立共用資料表

完成建立共有資料表的動作後,在 CREATE EXTENSION TABLE 語句的協助下,

針對租戶(此為 Nccu)建立其使用的私有資料表集合。同時,Columns_Metadata Table 也會隨著 CREATE、CREATE EXTENSION TABLE 語句的執行,更新其欄位資 訊(圖 4.3)。

圖 4.3 CREATE、CREATE EXTENSION TABLE 語句執行後,Columns_Metadata Table 的更新結果:

CREATE 語句執行後,產生了共用資料表欄位資訊(即新增了 1~3 行的部分);

CREATE EXTENSION TABLE 語句執行後,產生了私有資料表欄位資訊(即新增了 4~6 行的部分)。

在應用程式設計方面,藉著對資料庫進行新增資料(例如:學校新增課程資 料、學生將課程加入選課清單時,將選課記錄新增到資料庫)、更改資料(例如:

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

52

學校更改課程資料)、更改資料表綱要(例如:學校自行新增 CourseInfo 資料表 的客製化欄位、對其客製化欄位進行更名或刪除的動作)、刪除資料(例如:學生 從選課清單中刪除一門課程)亦或是查詢資料(例如:學生查詢選課清單)的動作 來協助完成選課系統的基本功能。上述的動作皆可依據一租戶一資料表的寫法 來撰寫 SQL 語句,再透過本系統工具依 Extension Table Layout 邏輯進行語句 轉換並在資料庫中執行產生影響。

假定應用程式會逐一分配給每間學校(租戶)一個獨一無二的租戶辨別碼,

即 TenantId。此 TenantId 透過 session 的方式從應用程式迭代到資料層級,所 以,系統工具在執行這些 SQL 語句時可藉由 TenantId 了解其執行對象。接下來 的例子,以 Nccu 該間學校(租戶)的角度示範如何藉由 SQL 語句的表達去實作多 校(租戶)選課系統的各種功能。

1. INSERT 語句:

通常在新增資料的時候會撰寫 INSERT 語句來表達,以學校新增課程資料為 例,先在網頁上提供一個 form 表單(圖 4.4),表單欄位內容為該校 (即 Nccu) 的 CourseInfo 資料表的欄位(除了 CourseId 欄位,此欄位是經網站內部處理所 產生的一個獨一無二課程代碼)。

圖 4.4 學校新增課程資料的展示。

在網站內部處理的部份,為了產生一個獨一無二的課程號碼(即 CourseId),

先撰寫 SELECT 語句,找出該校 CourseInfo 資料表中的課程資料筆數,然後,

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

53

以課程總數遞增的方式建立該新增課程的 CourseId。

緊接著,網站內部經由網頁表單取得其所需欄位資料後,組合產生的 INSERT 語句如下:

最後,可以清楚地從頁面看到其新增結果(圖 4.5):

圖 4.5 學校新增課程資料的結果展示。

2. UPDATE 語句:

一般來說,透過 UPDATE 語句可以協助更改資料的動作,以學校(即 Nccu) 更改課程資料為例,首先,先讓學校選擇其欲更改資料的課程(圖 4.6):

圖 4.6 學校點選欲修改課程的展示。

待選擇以後,則會出現該課程的原始資料,學校可以透過欄位去更改課程

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

54

資料,假設將 CourseId 為 Nccu14 的 Days 欄位從 Wed 更改成 Thu(圖 4.7):

圖 4.7 學校進行課程資料修改的展示。

此時,藉由 UPDATE 語句去進行更改課程資料的動作。網站內部經由網頁表 單取得其所需欄位資料後,組合產生的 UPDATE 語句如下:

更改課程資料後的結果顯示在圖 4.8:

圖 4.8 學校修改課程資料的結果展示。

3. ALTER 語句:

學校可以透過網頁新增 CourseInfo 資料表的客製化欄位(即滿足租戶適度 地客製化其資料表綱要的需求)。除此之外,亦可以對客製化欄位進行更名、刪 除。以上這些對客製化欄位影響的動作皆利用 ALTER 語句即可完成。

以圖 4.9 為例,該學校(即 Nccu)將新增一個客製化欄位,其欄位名稱為

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

55

Location,型態為 char,長度為 50,以用來表示該課程的上課地點。

圖 4.9 學校新增客製化欄位的展示。

學校在輸入完該客製化欄位(即 Location)的資料型態等資訊後,網站內部 經由網頁表單取得其所需欄位資料後,組合產生以下的 ALTER 語句去完成新增 客製化欄位的動作:

ATTER 語句執行以後,課程資料的顯示頁面增加了一個 Location 欄位(圖 4.10):

圖 4.10 學校新增客製化欄位的結果展示。

另外,也可以對客製化欄位進行更名以及刪除的動作,以上述新增的客製 化欄位(即 Location)為例,如果要將其名稱更名為 Classroom(圖 4.11),則可 以撰寫圖 4.13 中的 ATTER 語句一;若是撰寫圖 4.13 的 ATTER 語句二,則執行 刪除該客製化欄位的動作(圖 4.12),其執行後的結果如圖 4.14。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

56

圖 4.11 客製化欄位更名的展示。

圖 4.12 刪除客製化欄位的展示。

ALTER 語句一:

ALTER 語句二:

圖 4.13 客製化欄位更名以及刪除客製化欄位的 ALTER 語句展示。

圖 4.14 客製化欄位更名的結果展示。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

57

4. DELETE 語句

DELETE 語句主要是對過時或是錯誤的資料進行刪除的動作。以學生從選課 清單中刪除一門課程為例,如圖 4.15 所示學生可以透過頁面勾取其欲刪除的課 程。

圖 4.15 學生從選課清單刪除課程的展示。

網站內部取得學生欲刪除課程的 CourseId 之後,組合產生下列的 DELETE 語句去進行刪除的動作:

學生可以透過選課清單的查詢得知 DELETE 動作是否有成功執行(圖 4.16)。

圖 4.16 學生從選課清單刪除課程的結果展示。

5. SELECT 語句搭配 WHERE 條件式和 JOIN 指令:

一對一、多對一、多對多的資料關係在一個應用程式中是很常見的,這裡 以學生進行查詢選課清單為範例,透過 JOIN 指令去鏈結兩個存在於多校(租戶) 選課系統的資料表並進行查詢動作。以下是 StudentId 為 99753020 的該位同學 進行查詢選課清單時所需的 SELECT 語句以及查詢結果(圖 4.17):

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

58

圖 4.17 學生查詢選課清單的 SELECT 語句與結果。

上述提到的 ALTER 語句可以滿足租戶適度地客製化其資料表綱要的需求,

除此之外,以 Extension Table Layout 的概念去設計多租戶應用程式之資料層 級的另一項優點是可以提升軟體開發人員方便統一管理租戶的共有欄位以及其 資料的能力。從下面的解說可以很清楚了解這項優點。

假定多校(租戶)選課系統要進行系統更新,同時,提供一項新服務給各個 學校(租戶),此時,軟體開發人員可能必須修改既有的資料表以協助該項新服 務的開發。假定軟體開發人員要提供一項新服務讓學校可以將不屬於該學期的 課程資料關閉,防止顯示在學生選課的資訊頁面,此時,軟體開發人員可能需 要新增一個共有欄位(即 IsClosed)在所有學校的 CourseInfo 資料表中,透過學 校對此共有欄位的設定讓應用程式判斷是否將該筆課程資料顯示在學生選課的 資訊頁面中,若該筆課程資料的 IsClosed 欄位數值為 1,則代表不屬於該學期 的課程資料,所以,不顯示該筆課程資料在學生選課的資訊頁面中,反之,若 IsClosed 欄位數值為 0,則表示其屬於該學期的課程資料,則該筆課程資料會 顯示在學生選課的資訊頁面中以供學生選擇。

倘若採用 Private Table Layout 的概念去進行該多校(租戶)選課系統的資

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

59

料層級設計,以上述情形而言,軟體開發人員為了開發該項新功能必需逐一為 每個租戶產生 ALTER 語句去新增 IsClosed 這個共有欄位到其 CourseInfo 資料 表中,假定該系統目前有三個租戶(Nccu、Fju 以及 Tku),則必須產生三個不同 的 ALTER 語句(圖 4.18)去完成新增共有欄位的動作。若當租戶數量或是影響的 欄位數量增加,相對地會增加時間成本;同樣的情況下,若改採用 Extension Table Layout 的概念去進行該多校(租戶)選課系統的資料層級設計,軟體開發 人員只需要產生一個 ALTER 語句(圖 4.19)即可完成新增共有欄位的動作。

圖 4.18 依 Private Table Layout 的概念設計其資料層級,

進行新增共有欄位的 ALTER 語句範例。

圖 4.19 依 Extension Table Layout 的概念設計其資料層級,

進行新增共有欄位的 ALTER 語句範例。

從上述的這些實際例子看來,可以發現軟體開發人員在採用本系統工具的 協助下,以 Extension Table Layout 的概念進行多租戶應用程式之資料層級設 計,除了可以藉由租戶以自助的方式去更新其私有資料表以滿足租戶適度地客 製化其資料表綱要的需求外,亦可以方便軟體開發人員統一管理租戶的共有欄 位及其資料,藉此降低開發上的困難。