热门标签 | 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 拒绝。

推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
  • 解决Linux系统中pygraphviz安装问题
    本文探讨了在Linux环境下安装pygraphviz时遇到的常见问题,并提供了详细的解决方案和最佳实践。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • CMake跨平台开发实践
    本文介绍如何使用CMake支持不同平台的代码编译。通过一个简单的示例,我们将展示如何编写CMakeLists.txt以适应Linux和Windows平台,并实现跨平台的函数调用。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
author-avatar
TTTTTTTT-Tang
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有