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