
這種方案雖然能滿足可配置、可擴展的需求,但是預留過多浪費空間,預設過少,又不能滿足租戶的需求。
方案3:名稱值對,本方案采用一個單獨的表來存儲擴展數據。擴展表將數據表的橫向擴展列轉換成縱向的擴展數據集,為每一條原數據記錄設一個擴展字段,保存為擴展表中的一條記錄。將數據表中的數據記錄與元數據表中的配置記錄相關聯,構成擴展數據記錄。如圖1所示。

圖1 名稱值對擴展表結構
雖然這種方案很好地達到了多租戶數據擴展的靈活性要求,但增加了查詢、更新記錄等數據庫操作的復雜度,每次操作都涉及到多個表間的關聯,因此該方案也有待優化。
方案4:XML共享模型的數據擴展,這種方案在數據表中采用一種XML數據類型字段來存儲租戶間的數據。當今主流的關系數據系統都支持XML數據的存儲和管理,并提供了很多函數來直接對XML文檔節點進行管理。下面以Oracle數據庫系統為例。
表結構:TableName(TenantID,Col1,Col2,,XMLDataField),其中TenantID、Col1、Col2字段是所有租戶共用的字段;XMLDataField字段存儲租戶特有的異構數據,其格式完全遵循XML的格式。設計XMLDataField字段的格式如下:
value1
value2
value3
……
XML文檔中每個子節點代表租戶的一個擴展列,包括列名、列的數據類型、列所對應的值等信息。每增加一個擴展列就在相應的XML文檔中添加一個子節點,滿足租戶對數據擴展的個性化需要。
使用XML字段作為數據擴展方案,對擴展數據的操作簡單,不需頻繁地多表連接,可以靈活地滿足多租戶模式下的異構數據的定制,提高了性能。該方案的使用需要在系統的架構模式中添加一層對XML數據進行解析再呈現給客戶以及對客戶數據封裝成XML數據再保存到數據庫中。
2.3 多租戶模式下的功能可配置
SaaS軟件所強調的是“按需使用,按需付費”。在SaaS模式下,租戶根據自己不同的需求來使用同一軟件,則需達到可配置性要求。實現功能的可配置,可采用如圖2所示的四級表結構。

圖2 四級表結構
每個租戶對應一個預設的功能模式,預設了租戶的基本功能。功能模式由多個原子功能構成。租戶表存儲租戶的相關信息,TenantID:租戶的唯一標識;UserName:租戶的登錄賬號;Password:租戶的登錄密碼;PatternNo:租戶使用系統包括的功能模式。功能表存儲了系統所有的原子功能相關信息,MENU_No:原子功能唯一標識;MENU_NAME:原子功能的名稱。模式表存儲了功能模式信息。PatternNo:系統中包括的所有模式標識。MENU_No:功能模式包括的原子功能。模式表可以作為租戶選擇功能的向導。租戶模式功能表存儲了租戶所擁有的功能的相關信息。租戶模式功能表定義了該租戶所有的功能信息,該表可以作為租戶所擁有的所有功能的查詢。
CIO頻道人物視窗
CIO頻道方案案例庫
大數據建設方案案例庫
電子政務建設方案案例庫
互聯集成系統構建方案案例庫
商務智能建設方案案例庫
系統集成類軟件信息研發企業名錄