热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

介绍DB2中执行基于时间的引用完整性

IBMDB210中的新时态特性为基于时间的数据管理提供了丰富的功能。例如,一个日期范围可分配给每行数据以指出您的应用程序或业务何时认为该行有效。支持跟踪此类业务有效性的表称作应用程序周期时态表,而且其业务时间周期可以是过去的、现在的或

IBM DB2 10 中的新时态特性为基于时间的数据管理提供了丰富的功能。例如,一个日期范围可分配给每行数据以指出您的应用程序或业务何时认为该行有效。支持跟踪此类业务有效性的表称作应用程序周期时态表,而且其业务时间周期可以是过去的、现在的或

对于有外键关系的父表和子表,可扩展引用完整性的概念来考虑传统键值,以及任何给定行的业务时间周期。本文将介绍这种时态引用完整性 (temporal referential integrity),以及如何在 DB2 中强制执行基于时间的一致性。本文内容适用于 DB2 for z/OS® 和 DB2 for Linux®, UNIX®, and Windows®。所有 SQL 样例已在 DB2 10.1 for LUW® 中进行了测试。

DB2 10 for z/OS 和 DB2 10 for Linux, UNIX, and Windows 引入了基于时间的数据管理,允许您查询和操作过去、现在以及未来的数据,同时保留所有数据更改的完整历史记录。DB2 中的时态特性集合也被称之为 Time Travel Query。

DB2 支持 3 类时态表:

  • 系统周期时态表:DB2 以透明的方式不断地保留已更新或删除行的历史记录。使用 SQL 语言标准的新结构,用户可以 “回到过去” 并查询过去任一选择点的。这是以内部分配的系统时间戳为基础,DB2 使用该时间戳来管理系统时间,也称之为事务处理时间。
  • 应用程序周期时态表:应用程序提供日期或时间戳以描述数据的业务有效性。SQL 的新结构支持应用程序插入、查询、更新和删除过去、现在以及未来的数据。DB2 自动应用约束条件和行分割 (row-split) 来正确地维护应用程序提供的业务时间,也称之为有效时间。
  • 双时态表:管理系统时间和业务时间。双时态表结合了系统周期和应用程序周期时态表的所有功能。这种结合使得应用程序能够管理数据的业务有效性,同时 DB2 可保存所有更新和删除的完整历史记录。

在本文其余部分,我们假设您熟悉 DB2 中应用程序周期时态表的基本知识。时态引用完整性 (RI) 的讨论也适用于双时态表中的业务时间。当您更新或删除业务时间中一个指定部分的数据时,应该了解如何创建和使用这些表,并了解 DB2 如何执行行分割 (row-split)。

什么是时态引用完整性?

一个示例

在本小节中,我们首先重温了关系数据库中传统的引用完整性 (RI),然后对时态 RI 展开讨论。我们的场景涉及一个虚拟业务,该业务从供应商处接收产品,然后将这些产品卖给客户,偶尔也会进行促销活动,在一定时间段内以折扣价格销售选定的产品。为了帮助您理解如何实现和执行时态 RI,我们使用该应用程序场景和样例数据。

传统 RI

清单 1 显示两个涉及管理该业务的表。父表,product_avail,提供的每个产品在其中都有一行,并识别提供该产品的供应商。子表,promotion,每个特价产品都有一行,由一个促销 ID、各自的产品 ID 和折扣价定义。两个表可能还有其他列,但是为了简单起见,这些列目前已经足够了。

清单 1. 父表和子表之间引用完整性的简单示例

				
CREATE TABLE product_avail(
    prodID     INTEGER NOT NULL, 
    supplier   VARCHAR(32),
  PRIMARY KEY(prodID) );

CREATE TABLE promotion(
    promoID    INTEGER NOT NULL, 
    prodID     INTEGER NOT NULL, 
    price      DECIMAL(10,2), 
  PRIMARY KEY(promoID),
  FOREIGN KEY (prodID) REFERENCES product_avail(prodID) );

因为只能对已有产品提供促销,所以 promotion 表中的每一行必须包含一个存在于 product_avail 表中的 prodID。这个条件被称为 引用完整性,由 promotion 表中的外键 (foreign key, FK) 约束声明并执行。有了该约束,任何试图使用 product_avail 表中不存在的 prodID 插入或更新促销表的操作都将被 DB2 拒绝。

推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了adg架构设置在企业数据治理中的应用。随着信息技术的发展,企业IT系统的快速发展使得数据成为企业业务增长的新动力,但同时也带来了数据冗余、数据难发现、效率低下、资源消耗等问题。本文讨论了企业面临的几类尖锐问题,并提出了解决方案,包括确保库表结构与系统测试版本一致、避免数据冗余、快速定位问题等。此外,本文还探讨了adg架构在大版本升级、上云服务和微服务治理方面的应用。通过本文的介绍,读者可以了解到adg架构设置的重要性及其在企业数据治理中的应用。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • win10系统搭建Java开发环境的操作方法
    本文介绍了win10系统搭建Java开发环境的详细操作方法,包括下载Windows10系统和Java SE,安装Java开发环境,设置变量等步骤。操作简单,只需按照指导进行即可。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
author-avatar
小白牛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有