需求前提:資料每年變化1~2次,軟體預計生命週期50年。
實踐環境:Oracle Spatial。
術語表:時Null 物件,快照。
時Null 物件:一個地理目標從誕生到消亡所經曆的空間和時間範圍及其屬性資訊。這是一個為處理時空資料方便而抽象出來的概念,相當於全資訊模型中的全資訊對象。為了理解時Null 物件,我們以二維地物為例。二維地物在二維空間中佔據一定的空間範圍,表現為一個二維幾何體,也就是它的幾何屬性。如果再增加一條時間軸,成為(x,y,t)座標系,並認為任何的空間對象都有誕生和消亡,則這個二維地物就在(x,y,t)座標系中佔據了一定的三維空間。我們就把二維地物從誕生到消亡這一時間段所佔據的空間-時間範圍稱之為“時Null 物件”。同理,也可以將時Null 物件擴充為三維的空間對象在時間維度上的延續,也就是四維對象。時Null 物件的屬性資訊是一張二維表。
快照:一個地理目標在某一特定時刻所佔據的空間範圍及其屬性資訊,或者說:時Null 物件在某一特定的時刻所佔據的空間範圍及其相應的屬性資訊。舉例來說,地圖上繪製了一個飯店的位置,大小,這就是飯店的一個快照。因為飯店是從某一時刻才誕生的,又會在某一時刻消亡,而在誕生和消亡之間,還可能會搬遷或擴建。所以地圖上反映的僅僅是飯店在某一時刻的狀態,所以稱之為飯店在某一時刻的快照或時Null 物件在某一特定時刻的快照。注意,快照總是對應於某一特定的時刻,否則將失去快照的意義。快照的屬性資訊是時Null 物件屬性資訊表中的一條記錄。
設計方向:以時Null 物件的概念組織空間資料和屬性資料,使得對地物變遷曆史的查詢和分析成為可能。對應用程式層屏蔽曆史資料的處理過程,將曆史資料的處理當作資料庫模組的功能之一。
技術要點:
1、Oracle包變數的會話獨立性。
2、動態視圖技術(基於函數的視圖)
每一個時Null 物件都是由多個快照記錄所描述的。觀察者的每一次觀察都是基於一個特定的觀察時間的。例如,圖示中的觀察者應該看到對象一的快照2和對象三的快照2,而無法看到對象二和對象一、三的其他快照記錄。看不到對象二是因為在此觀察時間之前,對象二已經消亡。看不到對象一的快照1是因為對象一有更新的觀察資料快照2可以更好地近似反映對象二在當前觀察時間所處的狀態。
資料表:資料表的設計基於以上概念
預存程序:利用Oracle中包變數的會話獨立性,在包中建立以下幾個基本的預存程序:設定當前觀察時間,擷取當前觀察時間,利用當前觀察時間和傳入的Snap_time,Snap_end參數判斷快照記錄是否可見(Snap_Filter)。
視圖:建立在快照記錄表上的視圖,基於儲存函數Snap_Filter實現對錶中記錄的篩選。傳入參數為:Snap_time,Snap_End.,傳回值為此快照是否可見。
SELECT Obj_id, Snap_time, Geom, Attr
FROM 快照記錄表
WHERE Snap_Filter(Snap_time, Snap_end) > 0;
觸發器:視圖上的觸發器,使應用程式層使用者可以在視圖中插入,修改,刪除資料。