• 沒有找到結果。

第三章 系統設計

3.4 系統實作方法

3.4.3 ALTER 語句的轉換

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

34

成。倘若資料庫中存在一個以上的共用資料表,則仿造上述的作法,逐一為新 租戶建立每一個私有資料表。因此,實作 CREATE EXTENSION TABLE 語句所產生 的 CREATE 語句數量會等同於共用資料表的數量。假定目前已存在三個共用資料 表,分別是 CourseInfoCommonFileds、StudentInfoCommonFields 以及 Select- CourseCommonFields,則實作 CREATE EXTENSION TABLE 語句所產生的 CREATE 語句數量會是三句(圖 3.15)。另外,Columns_Metadata Table 也會隨之進行更 新的動作,其所增加的欄位資訊部分如圖 3.16 的紅色方框部份。

3.4.3 ALTER 語句的轉換

上一小節藉著建立共用資料表去實現共有欄位的概念,接下來的小節將以建立 好的私有資料表透過 ALTER 語句的撰寫來滿足租戶客製化欄位的需求。本系統 工具中,主要支援了四種常見的 ALTER 語句類型,這些 ALTER 語句分別在執行 之後對資料表綱要產生不同影響,依照其影響結果可以分成四種類型:

類型 1. 增加一個資料表欄位

在”CourseInfo”資料表中增加一個資料表欄位 Location,其欄位型態為 char,長度為 10。

類型 2. 改變資料表欄位的名稱

在” CourseInfo”資料表中的資料表欄位 Location 的名稱變更成 Classroom。

類型 3. 改變資料表欄位的資料型態

在” CourseInfo”資料表中將資料表欄位 Location 的資料型態從 char(10) 變更成 char(30)。

類型 4. 刪去一個資料表欄位

刪除” CourseInfo”資料表中的資料表欄位 Location。

介紹完四種 ALTER 語句的表達方式,可以知道執行 ALTER 語句對私有資料

軟體開發人員在 setTenantId()設定其 TenantId 以協助系統進行語句轉 換。在此,透過 TenantId 能夠清楚得知其 SQL 語句所要執行的對象(租戶)。

利用 setTenantId()取得 TenantId(此為 Nccu)以協助系統進行語句轉換 (line 7)。接下來,JSqlPaeser 分析語句結構取得所需的語句元素,例如:資 料表名稱(此為 CourseInfo)、新建立的欄位名稱(此為 Location)以及新建立的 欄位型態(此為 Char(10))。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

36

最後,進入依據 Extension Table Layout 邏輯進行語句轉換的階段,先判 斷資料表名稱來了解執行對象是共用資料表或是私有資料表,此例因為資料表 名稱結尾沒有關鍵字”CommonFields”,所以,可以知道執行對象是屬於私有 資料表,實際上,也就是租戶進行新增客製化欄位的動作(反之,若其執行對象 為共有資料表,則代表軟體開發人員對共用資料表進行新增欄位的動作),接下 來,本系統工具把 TenantId(此為 Nccu)以及資料表名稱(CourseInfo)組合起來 形成轉換所需的私有資料表名稱 (此為 NccuCourseInfo),其餘的語句元素不需 要做額外的改變。轉換後的結果如同 3.18 所示。

圖 3.17 ALTER 語句範例

圖 3.18 ALTER 語句轉換後的結果

最後,同樣在 Columns_Metadata Table 新增”Location”欄位名稱到原本 記錄 NccuCourseInfo 資料表欄位資訊的該筆記錄(圖 3.18)。

圖 3.19 執行 ALTER 語句後, Columns_Metadata Table 的更新結果

總結 3.4.2 以及 3.4.3 兩小節,在其所提到的 CREATE、CREATE EXTENSION TABLE 以及 ALTER 語句相互配合之下,順利在多租戶應用程式之資料層級實現

Extension Table Layout 的共有欄位、私有欄位概念。