标题：时态数据库
什么是时态数据库
区别于传统的关系型数据库(RDBMS)，时态数据库(Temporal Database)主要用于记录那些随着时间而变化的值的历史，而这些历史值对应用领域而言又  时态数据库是重要的，这类应用有：金融、保险、预订系统、决策支持系统等。
目前时态数据库还没有像如Oracle、SQL Server等大型关系数据库那样的产品。在当前时态数据库技术尚未完全成熟的现状下，DBMS提供商不会轻易把时态处理功能引入现有的DBMS中，因此，利用成熟的RDBMS数据库，建立时态数据库的中间件，在现阶段是一个较好的选择，因此就应运而生TimeDB和TempDB了。
时态数据库理论的基本概念
时态数据库理论提出了三种基本时间：用户自定义时间、有效时间和事务时间。同时把数据库分为四种类型：快照数据库、回滚数据库、历史数据库和双时态数据库。
 用户自定义时间：指用户根据自己的需要或理解定义的时间。时态数据库系统不处理用户自己定义的时间类型。因此，用户自定义时间是和应用相关的，不在时态数据库处理的范围之内。
 有效时间（Valid-Time）：指一个对象在现实世界中发生并保持的时间，即该对象在现实世界中语义为真的时间，包含Valid-From和Valid-To两个值。它可以指示过去、现在和未来。例如，考虑事实“小明从2003年到2007年是大学生”，那么时间区间[2003, 2007]是事实“小明是大学生”的有效时间区间，该事实在该时间区间内为真。有效时间可以是时间点、时间点的集合、时间区间或者时间区间的集合，或者是整个时间域。有效时间由时态数据库系统解释并处理，在查询的过程中对用户透明。用户也可以显式地查询和更新有效时间。
 事务时间（Transaction-Time）：指一个数据库对象发生操作的时间，是一个事实存储在数据库、或者在数据库中发生改变的时间，包含Transaction-From和Transaction-To两个值。当用户对数据库状态进行更改时，会产生各种操作历史，事务时间真实地记录了数据库状态变更的历史。有时也称事务时间为系统时间。
 快照数据库：快照数据库是反映现实世界某一瞬间情况的数据模型。它记录了特定时刻的数据库状态。快照数据库采用这样的假设：一个存储在数据库中的元组，一定是真实世界中的有效事实。
 历史数据库：数据库中被管理对象的生命周期是对象的有效时间，每一个元组记录了数据的一个“历史”状态。历史数据库中没有约束时间的表示方法，可以是时间点的集合、时间区间或者区间集合等形式表示。
回滚数据库：数据库中被管理对象的生命周期是事务时间的数据库。它保存了数据库中事务提交、状态演变的历史状态。
双时态数据库：数据库中元组包含一个系统支持的有效时间和一个系统支持的事务时间的数据库，称为双时态数据库。双时态数据库具备了快照数据库、历史数据库和回滚数据库的特点，存储了现实世界和数据库系统的变更历史。
 Now：Now的中文意思是当前时间，是一个时间变元，随着当前时间的变化而变化，记录了随时间变化的信息，它的有效值依赖于当前时间。但在很多应用当中，now值还能表示“过去”和“未来”时间，这就是now语义的研究课题，它对于提高时态系统查询效率具有比较重要的意义。有关now语义的讨论可参见 软件学报 Vol. 16, No.5 (2005) 838-845
时态数据库脚本ATSQL的使用
时态数据处理构件根据ATSQL2的语法引入了Now、Beginning和Forever三个变元。Beginning和Forever分别表示时态数据处理构件所能表示的时间起点和终点。Now表示当前时间。每次执行操作时必须使Now绑定到一个固定的值（操作执行的当前时间），这样后继操作才能正常进行。在下面的ATSQL2中表示的这几个单词是具有具体的含义的。
ATSQL2的数据定义语句包括以下几项功能：创建表、创建视图、删除表、删除视图。
ATSQL2语言和普通SQL语句一样，使用“create table”关键字创建数据库表，关键字“as validtime”用于指示系统创建具有有效时间支持的数据库表。
时态数据的变元
时态数据处理构件根据ATSQL2的语法引入了Now、Beginning和Forever三个变元。Beginning和Forever分别表示时态数据处理构件所能表示的时间起点和终点。Now表示当前时间。每次执行操作时必须使Now绑定到一个固定的值（操作执行的当前时间），这样后继操作才能正常进行。
时态数据处理构件使用重写底层比较过程的方法绑定Now的语义。它把Now、Beginning和Forever分别用以下三个具体的时间值表示：
Now = ‘9999-01-01 00:00:00’；
Beginning = ‘1000-01-01 00:00:00’；
Forever = ‘9999-12-31 23:59:59’.
因为使用了特殊值表示这三个变元，一方面使得时态数据处理构件能处理的时间范围比原商业数据库能处理的时间范围小，另一方面使得原商业数据库底层对时间类型数据的比较算子有了新的意义。例如，如果当前时间是2007年12月1日，考虑“2009-1-1>Now”的意义时，应当先把Now替换为2009-1-1，比较结果为真。
在TimeDB中Now只是当前时间的别名。在时态插入语句的执行过程中，Now作为一个标记被替换为语句执行的当前时间。
存储现实世界的时间经历状态信息的数据库叫做时态数据库(Temporal Database)。
时态数据库与传统数据库最大的区别在于它对时间相关的操作进行了有力的支持。
一般而言，数据库系统对世界的当前状态建模，不会保存过去状态的信息。比如当前的客户、当前的学生很当前提供的课程。在许多应用中，保存和检索有关过去状态的信息非常重要。比如一个病人数据库必须保存每个病人的病历信息，一个工厂监视系统可能要保存工厂中传感器当前和过去的读入数据以进行分析。
时态数据库管理系统
TDBMS基本组成传统数据库管理系统（DBMS）具有支持时间和日期的数据类型，但不能直接支持和管理时态数据，关于时态方面的操作需要由另行编写的应用程序完成。时态数据库管理系统（TDBMS）具有提供时态数据操作和支持时态数据管理的基本功能。 一个TDBMS需要具有下述子系统：
时态数据定义子系统 用来定义（创建、取消和修改）各种时态数据。时态数据操纵子系统 用来控制时态数据的各种基本操作。时态数据查询子系统 用来查询各类时态数据并且提供时态语义的支持。时态约束子系统 用来支持数据完整性过程中的各类时间关联与制约，例如被参照表中主键有效时间期间变化时参照表中外键的变化等。该子系统的基本功能是保证时态数据的一致性。TimeDBTimeDB由A. Steiner于1998年开发的一个时态数据库管理系统 最新版本是2.2版。TimeDB是传统数据库管理系统的前端软件，用户使用ATSQL2语句描述应用中时态操作，然后由TimeDB转换后形成标准SQL语句，这些标准SQL语句传输到后台关系数据库中进行实际数据的操作。TimeDB初步实现了时态查询、时态更新、时态视图和部分时态完整性约束等基本时态功能，同时也兼容非时态数据操作。 TimeDB 1.0版本由Andreas使用SICStus Prolog语言开发，运行在SWI Prolog环境中。TimeDB 2.0版本使用Java语言开发，具有平台无关特征；基于JDBC访问数据库，可以在IBM Cloudscape、Oracle、Sybase等多种数据库管理系统之上使用；具有较友好的用户界面；优化了辅助表创建过程；具有本地调用接口TDBCI，可供Java应用程序调用以执行ATSQL2语句。 TimeDB 2.1版本开始使用Java SDK 1.4版本，支持Cloudscape 10； TimeDB 2.2版本加入了对Oracle 10g的支持。TempDBTempDB是由汤庸教授领导的时态数据库研究小组于2002年开发研制，目前最新版本2.1版。作为国内首个支持时态数据管理的TDBMS，TempDB在逻辑上使用双时态数据模型，使用ATSQL2语言，支持电子政务、电子商务、决策支持等信息处理系统中的时态应用；同时，TempDB在技术上基于关系数据库管理系统MySQL平台、采用JAVA语言进行底层开发，具有较强的可移植性以及部署方便。 相对TimeDB，而TempDB能支持基于Now语义复杂操作，支持不确定时态语义查询；TempDB同时实现了运行归并和更新归并两种，这样不会出现时间戳相邻而用户定义属性完全相同的（未可归并）情形；TempDB能支持基于Now语义复杂操作，支持不确定时态语义查询。此外，TempDB还提供统一的图形化界面供用户输入语句、查看语句执行结果和中间结果，以及检测语句执行时的可能出错信息。