文章詳情頁
Oracle Spatial時態空間數據庫設計
瀏覽:4日期:2023-11-13 08:18:29
需求前提:數據每年變化1~2次,軟件預計生命周期50年。 實踐環境:Oracle Spatial。 術語表:時空對象,快照。 時空對象:一個地理目標從誕生到消亡所經歷的空間和時間范圍及其屬性信息。這是一個為處理時空數據方便而抽象出來的概念,相當于全信息模型中的全信息對象。為了理解時空對象,我們以二維地物為例。二維地物在二維空間中占據一定的空間范圍,表現為一個二維幾何體,也就是它的幾何屬性。假如再增加一條時間軸,成為(x,y,t)坐標系,并認為任何的空間對象都有誕生和消亡,則這個二維地物就在(x,y,t)坐標系中占據了一定的三維空間。我們就把二維地物從誕生到消亡這一時間段所占據的空間-時間范圍稱之為“時空對象”。同理,也可以將時空對象擴展為三維的空間對象在時間維度上的延續,也就是四維對象。時空對象的屬性信息是一張二維表。 快照:一個地理目標在某一特定時刻所占據的空間范圍及其屬性信息,或者說:時空對象在某一特定的時刻所占據的空間范圍及其相應的屬性信息。舉例來說,地圖上繪制了一個飯店的位置,大小,這就是飯店的一個快照。因為飯店是從某一時刻才誕生的,又會在某一時刻消亡,而在誕生和消亡之間,還可能會搬遷或擴建。所以地圖上反映的僅僅是飯店在某一時刻的狀態,所以稱之為飯店在某一時刻的快照或時空對象在某一特定時刻的快照。注重,快照總是對應于某一特定的時刻,否則將失去快照的意義??煺盏膶傩孕畔⑹菚r空對象屬性信息表中的一條記錄。 設計方向:以時空對象的概念組織空間數據和屬性數據,使得對地物變遷歷史的查詢和分析成為可能。對應用層屏蔽歷史數據的處理過程,將歷史數據的處理當作數據庫模塊的功能之一。 技術要點: 1、 Oracle包變量的會話獨立性。 2、 動態視圖技術(基于函數的視圖) 每一個時空對象都是由多個快照記錄所描述的。觀察者的每一次觀察都是基于一個特定的觀察時間的。例如,圖示中的觀察者應該看到對象一的快照2和對象三的快照2,而無法看到對象二和對象一、三的其他快照記錄??床坏綄ο蠖且驗樵诖擞^察時間之前,對象二已經消亡??床坏綄ο笠坏目煺?是因為對象一有更新的觀察數據快照2可以更好地近似反映對象二在當前觀察時間所處的狀態。 數據表:數據表的設計基于以上概念 存儲過程:利用Oracle中包變量的會話獨立性,在包中建立以下幾個基本的存儲過程:設置當前觀察時間,獲取當前觀察時間,利用當前觀察時間和傳入的Snap_time,Snap_end參數判定快照記錄是否可見(Snap_Filter)。 視圖:建立在快照記錄表上的視圖,基于存儲函數Snap_Filter實現對表中記錄的篩選。傳入參數為:Snap_time,Snap_End.,返回值為此快照是否可見。 SELECT Obj_id, Snap_time, Geom, AttrFROM 快照記錄表 WHERE Snap_Filter(Snap_time, Snap_end) > 0;觸發器:視圖上的觸發器,使應用層用戶可以在視圖中插入,修改,刪除數據。 要點: 1、維護表中數據時要避免出現時間悖論,造成時間邏輯混亂。 2、快照記錄表中的Snap_end列的維護稍微麻煩一些,應小心謹慎。擴展與變化: 1、 支持多種觀察模式。 為了查詢功能的靈活性,可以增加幾個擴展功能的存儲過程:設置當前的觀察模式,獲取當前的觀察模式,重寫Snap_Filter函數以支持多種觀察模式。 例如:【對象歷史追溯模式】此時當前觀察時間這一參數失效,Snap_Filter的行為發生變化,視圖中看到的是某一(或某幾個)指定對象的所有快照。這種模式便于對單個對象的整個歷史變遷過程加以追蹤。 【時間段觀察模式】此時需要設置的觀察時間不是一個時間點,而是一個時間段。Snap_Filter的返回值也有了更豐富的含義,可以用不同的數字(例如:1,2,4)表示某一快照記錄在當前時間段開始,結尾,中間的可見性。這種模式可以用于需要對兩個不同時間點的數據進行比較的場合。 2、 增加對象關系表以描述時空對象之間的聯系 時空對象之間可能會有各種各樣的聯系,例如:變化,融合,分裂等??赏ㄟ^以下表格加以描述。 使用方法:假如是查詢最新信息,即觀察時間為系統當前時間,則直接訪問視圖即可。假如是查詢歷史數據,只需在數據連接會話中調用存儲過程來設置當前觀察時間,其效果是所有視圖中可見的記錄集合都是當前觀察時間點可見的記錄,其他記錄不會出現在視圖中。
排行榜