需求前提:数据每年变化1~2次,软件预计生命周期50年
实践环境:Oracle Spatial
术语表:时空对象,快照
时空对象:一个地理目标从诞生到消亡所经历的空间和时间范围及其属性信息。这是一个为处理时空数据方便而抽象出来的概念,相当于全信息模型中的全信息对象。为了理解时空对象,我们以二维地物为例。二维地物在二维空间中占据一定的空间范围,表现为一个二维几何体,也就是它的几何属性。如果再增加一条时间轴,成为(x,y,t)坐标系,并认为任何的空间对象都有诞生和消亡,则这个二维地物就在(x,y,t)坐标系中占据了一定的三维空间。我们就把二维地物从诞生到消亡这一时间段所占据的空间-时间范围称之为“时空对象”。同理,也可以将时空对象扩展为三维的空间对象在时间维度上的延续,也就是四维对象。时空对象的属性信息是一张二维表。
快照:一个地理目标在某一特定时刻所占据的空间范围及其属性信息,或者说:时空对象在某一特定的时刻所占据的空间范围及其相应的属性信息。举例来说,地图上绘制了一个饭店的位置,大小,这就是饭店的一个快照。因为饭店是从某一时刻才诞生的,又会在某一时刻消亡,而在诞生和消亡之间,还可能会搬迁或扩建。所以地图上反映的仅仅是饭店在某一时刻的状态,所以称之为饭店在某一时刻的快照或时空对象在某一特定时刻的快照。注意,快照总是对应于某一特定的时刻,否则将失去快照的意义。快照的属性信息是时空对象属性信息表中的一条记录。
设计方向:
以时空对象的概念组织空间数据和属性数据,使得对地物变迁历史的查询和分析成为可能。
对应用层屏蔽历史数据的处理过程,将历史数据的处理当作数据库模块的功能之一。
技术要点:
1、 Oracle包变量的会话独立性
2、 动态视图技术(基于函数的视图)
图形解说:
时间
空间
对象诞生时间
观察方向
当前观察时间
对象消亡时间
快照3
快照2
快照1
时空对象(对象一)
对象三
对象二
从以上示意图中可以清晰地看出,每一个时空对象都是由多个快照记录所描述的。观察者的每一次观察都是基于一个特定的观察时间的。例如,图示中的观察者应该看到对象一的快照2和对象三的快照2,而无法看到对象二和对象一、三的其他快照记录。看不到对象二是因为在此观察时间之前,对象二已经消亡。看不到对象一的快照1是因为对象一有更新的观察数据快照2可以更好地近似反映对象二在当前观察时间所处的状态。
数据表:数据表的设计基于以上概念
对象表
Obj_id
NUMBER
时空对象标识号
1<pk>
2
3Start_time
4
5DATE
6
7对象诞生时间
8
9
10
11End_time
12
13DATE
14
15对象消亡时间
16
17
18
19Obj_Attr
20
21VARCHAR2(100)
22
23对象属性数据
24
25会因时间的流逝而发生变化的属性信息。
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41快照记录表
42
43
44
45Obj_id
46
47NUMBER
48
49时空对象标识号
50
51<fk>
52
53Snap_id
54
55NUMBER
56
57快照数据的唯一序号
58
59<pk>
60
61Snap_time
62
63DATE
64
65快照时间
66
67
68
69Snap_end
70
71DATE
72
73快照结束时间
74
75属于同一时空对象的最近的下一条快照的快照时间。设置此列的目的是为了查询方便。
76
77Geom.
78
79MDSYS.SDO_GEOMETRY
80
81快照几何数据
82
83
84
85Attr
86
87VARCHAR2(100)
88
89快照属性数据
90
91会因时间的流逝而发生变化的属性信息。
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125存储过程:
126
127利用Oracle中包变量的会话独立性,在包中建立以下几个基本的存储过程:设置当前观察时间,获取当前观察时间,利用当前观察时间和传入的Snap_time,Snap_end参数判断快照记录是否可见(Snap_Filter)。
128
129
130
131视图:建立在快照记录表上的视图,基于存储函数Snap_Filter实现对表中记录的筛选。传入参数为:Snap_time,Snap_End.,返回值为此快照是否可见。
132
133
134
135SELECT Obj_id, Snap_time, Geom, Attr
136
137FROM 快照记录表
138
139WHERE Snap_Filter(Snap_time, Snap_end) > 0;
140
141
142
143Obj_id
144
145NUMBER
146
147时空对象标识号
148
149
150
151Snap_time
152
153DATE
154
155快照时间
156
157
158
159Geom.
160
161MDSYS.SDO_GEOMETRY
162
163快照几何数据
164
165
166
167Attr
168
169VARCHAR2(100)
170
171快照属性数据
172
173
174
175
176
177
178
179
180
181
182
183
184
185触发器:
186
187视图上的触发器,使应用层用户可以在视图中插入,修改,删除数据。
188
189要点: 1、维护表中数据时要避免出现时间悖论,造成时间逻辑混乱。
190
1912、快照记录表中的Snap_end列的维护稍微麻烦一些,应小心谨慎。
192
193
194
195扩展与变化:
196
1971、 支持多种观察模式。
198
199为了查询功能的灵活性,可以增加几个扩展功能的存储过程:设置当前的观察模式,获取当前的观察模式,重写Snap_Filter函数以支持多种观察模式。
200
201例如:
202
203【对象历史追溯模式】此时当前观察时间这一参数失效,Snap_Filter的行为发生变化,视图中看到的是某一(或某几个)指定对象的所有快照。这种模式便于对单个对象的整个历史变迁过程加以追踪。
204
205【时间段观察模式】此时需要设置的观察时间不是一个时间点,而是一个时间段。Snap_Filter的返回值也有了更丰富的含义,可以用不同的数字(例如:1,2,4)表示某一快照记录在当前时间段开始,结尾,中间的可见性。这种模式可以用于需要对两个不同时间点的数据进行比较的场合。
206
2072、 增加对象关系表以描述时空对象之间的联系
208
209时空对象之间可能会有各种各样的联系,例如:变化,融合,分裂等。可通过以下表格加以描述。
210
211
212
213时空对象关系表
214
215Obj_1
216
217NUMBER
218
219时空对象标识号
220
221<pk><fk>
222
223Obj_2
224
225NUMBER
226
227时空对象标识号
228
229<pk><fk>
230
231Relation_type
232
233NUMBER
234
235关系类型
236
237<pk>
238
239
240
241
242
243
244
245
246
247使用方法:
248
249如果是查询最新信息,即观察时间为系统当前时间,则直接访问视图即可。
250
251如果是查询历史数据,只需在数据连接会话中调用存储过程来设置当前观察时间,其效果是所有视图中可见的记录集合都是当前观察时间点可见的记录,其他记录不会出现在视图中。</pk></fk></pk></fk></pk></pk></fk></pk>