基于Oracle Spatial的时态空间数据库设计

oracle|设计|数据|数据库|数据库设计

需求前提:数据每年变化1~2次,软件预计生命周期50年

实践环境:Oracle Spatial

 

术语表:时空对象,快照

时空对象:一个地理目标从诞生到消亡所经历的空间和时间范围及其属性信息。这是一个为处理时空数据方便而抽象出来的概念,相当于全信息模型中的全信息对象。为了理解时空对象,我们以二维地物为例。二维地物在二维空间中占据一定的空间范围,表现为一个二维几何体,也就是它的几何属性。如果再增加一条时间轴,成为(x,y,t)坐标系,并认为任何的空间对象都有诞生和消亡,则这个二维地物就在(x,y,t)坐标系中占据了一定的三维空间。我们就把二维地物从诞生到消亡这一时间段所占据的空间-时间范围称之为“时空对象”。同理,也可以将时空对象扩展为三维的空间对象在时间维度上的延续,也就是四维对象。时空对象的属性信息是一张二维表。

快照:一个地理目标在某一特定时刻所占据的空间范围及其属性信息,或者说:时空对象在某一特定的时刻所占据的空间范围及其相应的属性信息。举例来说,地图上绘制了一个饭店的位置,大小,这就是饭店的一个快照。因为饭店是从某一时刻才诞生的,又会在某一时刻消亡,而在诞生和消亡之间,还可能会搬迁或扩建。所以地图上反映的仅仅是饭店在某一时刻的状态,所以称之为饭店在某一时刻的快照或时空对象在某一特定时刻的快照。注意,快照总是对应于某一特定的时刻,否则将失去快照的意义。快照的属性信息是时空对象属性信息表中的一条记录。

 

设计方向:

       以时空对象的概念组织空间数据和属性数据,使得对地物变迁历史的查询和分析成为可能。

       对应用层屏蔽历史数据的处理过程,将历史数据的处理当作数据库模块的功能之一。

 

技术要点:

1、  Oracle包变量的会话独立性

2、  动态视图技术(基于函数的视图)

 

图形解说:

时间

空间

对象诞生时间

 

观察方向

 

当前观察时间

 

对象消亡时间

 

快照3

 

快照2

 

快照1

 

时空对象(对象一)

对象三

对象二
 

 

 

 

 

 

       从以上示意图中可以清晰地看出,每一个时空对象都是由多个快照记录所描述的。观察者的每一次观察都是基于一个特定的观察时间的。例如,图示中的观察者应该看到对象一的快照2和对象三的快照2,而无法看到对象二和对象一、三的其他快照记录。看不到对象二是因为在此观察时间之前,对象二已经消亡。看不到对象一的快照1是因为对象一有更新的观察数据快照2可以更好地近似反映对象二在当前观察时间所处的状态。

 

数据表:数据表的设计基于以上概念

对象表

 

Obj_id

NUMBER

时空对象标识号

<PK>

Start_time

DATE

对象诞生时间

 

End_time

DATE

对象消亡时间

 

Obj_Attr

VARCHAR2(100)

对象属性数据

会因时间的流逝而发生变化的属性信息。

 

 

 

 

 

 

 

快照记录表

 

Obj_id

NUMBER

时空对象标识号

<FK>

Snap_id

NUMBER

快照数据的唯一序号

<PK>

Snap_time

DATE

快照时间

 

Snap_end

DATE

快照结束时间

属于同一时空对象的最近的下一条快照的快照时间。设置此列的目的是为了查询方便。

Geom.

MDSYS.SDO_GEOMETRY

快照几何数据

 

Attr

VARCHAR2(100)

快照属性数据

会因时间的流逝而发生变化的属性信息。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

存储过程:

       利用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;

 

Obj_id

NUMBER

时空对象标识号

 

Snap_time

DATE

快照时间

 

Geom.

MDSYS.SDO_GEOMETRY

快照几何数据

 

Attr

VARCHAR2(100)

快照属性数据

 

 

 

 

 

 

触发器:

       视图上的触发器,使应用层用户可以在视图中插入,修改,删除数据。

       要点:    1、维护表中数据时要避免出现时间悖论,造成时间逻辑混乱。

2、快照记录表中的Snap_end列的维护稍微麻烦一些,应小心谨慎。

 

扩展与变化:

1、  支持多种观察模式。

为了查询功能的灵活性,可以增加几个扩展功能的存储过程:设置当前的观察模式,获取当前的观察模式,重写Snap_Filter函数以支持多种观察模式。

例如:

【对象历史追溯模式】此时当前观察时间这一参数失效,Snap_Filter的行为发生变化,视图中看到的是某一(或某几个)指定对象的所有快照。这种模式便于对单个对象的整个历史变迁过程加以追踪。

【时间段观察模式】此时需要设置的观察时间不是一个时间点,而是一个时间段。Snap_Filter的返回值也有了更丰富的含义,可以用不同的数字(例如:1,2,4)表示某一快照记录在当前时间段开始,结尾,中间的可见性。这种模式可以用于需要对两个不同时间点的数据进行比较的场合。

2、  增加对象关系表以描述时空对象之间的联系

时空对象之间可能会有各种各样的联系,例如:变化,融合,分裂等。可通过以下表格加以描述。

 

时空对象关系表

Obj_1

NUMBER

时空对象标识号

<PK><FK>

Obj_2

NUMBER

时空对象标识号

<PK><FK>

Relation_type

NUMBER

关系类型

<PK>

 

 

 

 

使用方法:

如果是查询最新信息,即观察时间为系统当前时间,则直接访问视图即可。

       如果是查询历史数据,只需在数据连接会话中调用存储过程来设置当前观察时间,其效果是所有视图中可见的记录集合都是当前观察时间点可见的记录,其他记录不会出现在视图中。

 

时间: 2024-09-10 21:43:32

基于Oracle Spatial的时态空间数据库设计的相关文章

Oracle Spatial时态空间数据库设计

需求前提:数据每年变化1-2次,软件预计生命周期50年. 实践环境:Oracle Spatial. 术语表:时空对象,快照. 时空对象:一个地理目标从诞生到消亡所经历的空间和时间范围及其属性信息.这是一个为处理时空数据方便而抽象出来的概念,相当于全信息模型中的全信息对象.为了理解时空对象,我们以二维地物为例.二维地物在二维空间中占据一定的空间范围,表现为一个二维几何体,也就是它的几何属性.如果再增加一条时间轴,成为(x,y,t)坐标系,并认为任何的空间对象都有诞生和消亡,则这个二维地物就在(x,

Oracle中自定义临时表的实现及其在Oracle Spatial中的应用

oracle|临时表 Oracle 临时表功能介绍:         Oracle中的临时表是全局的,需要在数据库设计时创建完成,而不是程序使用时.每个登陆用户都使用这一个相同的临时表,但互相之间看不到彼此的数据,也就是说临时表是会话独立的.         Oracle 的临时表分为事务型和会话型.         事务型临时表就是指在事务处理过程中插入的记录只在事务提交或回滚之前有效,一旦事务完成,表中的记录便被自动清除.         会话型临时表指临时表中的数据在本次会话期间一直有效,

Oracle Spatial 简介

oracle Oracle Spatial 简介:        首先,Oracle 支持自定义的数据类型,你可以用数组,结构体或者带有构造函数,功能函数的类来定义自己的对象类型.这样的对象类型可以用于属性列的数据类型,也可以用来创建对象表.而Oracle Spatial也正是基于此种特性所开发的一套空间数据处理系统.        Spatial 的自定义数据类型有很多,都在MDSYS方案下,经常使用的是SDO_GEOMETRY类型.SDO_GEOMETRY表示一个几何对象,可以是点.线.面.

Oracle Spatial新驱动的添加记录实例

Oracle的空间数据库的操作驱动更新了,新的驱动适用于Oracle8.0或以上,新驱动在对数据库的操作上面和原有的驱动差别比较大,不过有一点:使用变得简单了 建立空间数据库和建立空间索引的步骤就略过了,那些网上有很多例子,而且实现方式上面也没有变化,下面列出添加一条空间数据库记录的代码: import java.sql.*; import oracle.sql.*; import oracle.spatial.geometry.JGeometry; /** * <p>Title: </

通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计

一.权限系统 这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述"左右值无限分类实现算法"如何来优化"系统菜单"的结构而告终.今天的内容和前几天的基础框架是一样的它们都属于基础知识,在这些基础知识上还可以扩展出无数的变种与进化设计. 二.先来看客户的一个需求 2.1用户实际需求 1.       所有的用户.角色可动态配置 2.       所有的系统菜单的权限要求具体到"增,删,改.查.打印.导出"这样的小权限的设

ejb-请问基于Java EE的构件规范设计开发构件,指的是使用EJB框架开发构件吗?

问题描述 请问基于Java EE的构件规范设计开发构件,指的是使用EJB框架开发构件吗? 我现在要完成的任务是开发一个可重用构件,这个构件要实现的功能是系统中一个数据处理模块.要求在Java EE 支撑平台下开发.我现在不太能理解这个构件的开发过程.查了资料得知javabean和ejb都可以用Java语言开发组件.javabean比较简单是一般和JSP配合的,开发比较小型的组件使用的.EJB更为复杂功能也全面,但是我的这个系统不是分布式的,也不需要与服务器进行交互.用EJB开发是不是有些不机智?

登录界面设计-基于MyEclipse的登录界面的设计

问题描述 基于MyEclipse的登录界面的设计 在MyEclipse下创建servlet,代码如下: package servlets; import java.io.IOException; import java.io.PrintWriter; import java.util.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.

浅谈Oracle数据库的建模与设计_oracle

正在看的ORACLE教程是:浅谈Oracle数据库的建模与设计.要开发一个基于数据库的应用系统,其中最关键的一步就是整个系统所依据的数据库的建模设计,从逻辑的到物理的,一个环节疏于设计,整个的应用系统便似建立在危房之上,随着开发过程的不断深入,它要随时面临着各种难  以预料的风险,开发者要为修改或重新设计没有设计好的数据库系统而付出难以预料的代价.所以,一个良好的数据库设计是高效率的系统所必须的.  一.逻辑建模  数据库设计的方法因具体数据库而异,但是建模阶段的相同的,所以可以用一些通用的工具

Oracle Spatial数据加密问题研究

oracle|加密|数据|问题 Oracle 9i2 特色功能:        1.返回值为自定义对象类型的函数.例如SDO_GEOMETRY数据类型.        2.可以用Java或C语言编写存储过程.÷Oracle Spatial 高级功能:        可以使用返回值为SDO_GEOMETRY数据类型的自定义函数作为几何列获取空间数据.         加密实现:     1.简单的数据加密.         1)创建返回值为SDO_GEOMETRY数据类型的自定义函数,从BLOB(