导读:在DB2数据库中有一种比较特殊的表,叫做聚集目标表。这个聚集目标表跟视图类似,都是只读的,是对基础表的统计。但是在本质上是不同的,即随着时间的推移,系统会向聚集目标表中追加行。也就是说,表中的数据是在数据库中实际存在的,而不是像视图一样是一种虚表。可见聚集目标表能够起着视图类似的作用,但是又可能保证数据的稳定性。
一、了解DB2数据库中的CD表。
在分析具体目标表对DB2数据库的作用之前,笔者认为首先需要了解一下CD表。这也是DB2数据库中一种特有的标。聚集目标表就是在这个CD表的基础上建立起来的。在DB2数据库中,可以实现类似其他数据库的数据复制功能。即可以在源数据库与预订集成员之间进行数据的复制与同步,以生成数据库副本。有时候在预订集成员中,可能需要追踪数据源表的更改,此时就需要使用这个CD表。DB2的官方文档对于CD表是这么定义的:对于为DB2数据库服务器上的更改捕获复制而注册的每个用户表,都有一个对应的更改数据表。简单的说,这个CD表,又称之为更改数据表,就是用来帮助数据库管理员追踪源表中更改的数据(包括更新、删除、插入等等)。某种应用程序会读取在更改数据表中已经递交的行,并将他们复制到映射至已经注册的表的任何目标表中。对于刚接触DB2数据库的管理人员来说,只需要知道,这个CD表(数据更新表)中,就是用来分析、追踪源表中用户所做的更改。
二、聚集目标表的类型与差异分析。
在DB2数据库中,聚集表主要有两种类型,分别为基本聚集表与更改聚集表。这两种表虽然都是聚集表,但是有很大的差异。作为数据库管理员必须了解他们之间的差异,并在实际工作中,根据用户的需求来选择合适的聚集目标表。简单的说,这两种目标表的差异主要在于统计的源表不同。而源表的数据不同,最终导致两种聚集表的结果有天壤之别。
基本聚集表其统计的是数据库的基本表中的内容。数据库之所以要采用基本聚集表,主要是用来定期追踪特定表中数据的状态。如现在有一张客户信息表,表中记录着企业当前的所有客户信息,包括新增加的客户、已经终止交易的客户等等。利用聚集目标表的sum函数或者avg函数就可以实现对这张表中数据的追踪分析。如现在用户需要知道某个年度每个月份的实际有效的客户数量,则就可以按月来计算源表中的平均行数(利用avg函数来是想)然后将结果存储在基本聚集表中。由于基本聚集表中的数据虽然是来自于源表,但是是数据库中实际存在的记录。为此在下一次运算的时候,不会随着源表中内容的更改,而影响到原有的统计结果。这个特性就是聚集目标表与视图的最大差别。由于前几个月的统计结果不会随着源表中数据的更改而改变,如此的话,用户就可以用来统计、分析每个月用户数量的变化情况。
不过这个基本聚集表有一个很大的缺陷,就是不能够反映出源表中数据的更改情况。如在7月份,企业增加了5个新客户,但是同时也终止了5个新客户。此时在基本聚集表中,反映的7月份有效客户数量跟6月份是相同的。但是实际情况是,虽然最后的结果是相同的,但是客户明细发生了变化。由于基本聚集表只是对源表进行简单的sun与avg等统计,所以不能够追踪到这些变化。这就是基本聚集表的特点,也是其最大的缺陷之一。
为了弥补基本聚集表的这个缺陷,在DB2数据库中又提出了更改聚集表的概念。更改聚集表与基本聚集表最大的差异就是他们所统计的源表是不同的。基本聚集表所统计的源表是基本数据表,如客户信息表等等。而更改聚集表所统计的源表是使用上面谈到的CD(更改数据表)表中的内容,而不是采用源表中的内容。而因为更改数据表记录了某张源表的变更情况,所以这个更改聚集表就能够反映出源表中数据的具体变化情况。如在上面这个例子中,用户不仅仅只满足与统计当前每月的有效客户数量,还需要了解每个月得到的客户数量与书去的客户数量。因为对于企业来说,得到一个新客户的成本很大。从某种角度来说,企业宁愿千方百计的留住现有的客户,也不愿意再去开发新的客户。也就是说,如果企业一边在增加新的客户,一边又不断的在失去老客户,那么对于企业来说这是一种失败的经营方式。为此,不少企业一方面在追求客户的数量,另一方面可能更加的关注老客户的流失。笔者已经碰到过不少的企业用户,他们非常的关注与当月客户流失数量与新增加客户的比例。如果新增加客户的数量大于客户的流失数量,那么销售人员不仅得不到应有的奖励,最后还有可能受到惩罚。所以从这种角度来讲,这个需求就比统计客户的有效数量还要来得重要。要实现这个需求,就需要用到更改聚集表。更改聚集表会根据客户信息表对应的CD表,来追踪客户信息表中数据的变化情况。如会统计当月客户信息表中新顾客增加的数量(表中有了insert插入操作)与老客户失去的数量(表中有了caozuo.html" target="_blank">删除操作)。通过这个手段,就可以统计新老客户的变化情况,从而为企业决策提供数据上的支持。
三、基本聚集表与更改聚集表相互依存。
从以上的分析中可以看出,虽然两个类型的聚集目标表所依据的基础表不同,他们产生的结果也有天壤之别,但是他们并不是对立的。从用户的需求来讲,这两个类型的聚集目标表是相互依存的。如企业可能需用同时统计每个月有效客户数量的变化情况与新老客户的变化情况,此时就需要同时用到这两个基本目标表。
其实笔者有时候更喜欢从另一个角度来考虑这两个表的差异。对于基本聚集表来说,其与源表的关系比较亲,即源表-基本聚集表,中间没有任何的中介。而对于更改聚集表来说,其源表与更改聚集表之间的关系就比较远,中介夹着一个CD数据更改表。他们的关系就变为了源表-CD数据更改表-更改聚集表。正是因为有了CD数据更改表在中间起了一个过滤的作用,所以才导致更改聚集表与基本聚集表他们之间结果上的差异。由于CD数据更改表保存了源表中的数据的变化情况,才使得更改聚集表能够统计分析出源表中数据的变化情况。所以,我们可以把基本聚集表当作是两层结构,而将更改聚集表当作是三层结构。从而可能更加容易理解这两个类型的聚集目标中的差异。在实际工作中,也更容易选择。在何时的情况下,选择使用合适的聚集目标表。不过在开发一些套装软件中,笔者喜欢同时使用他们。最终让用户选择到底使用哪个聚集目标表。
通过上文中的详细分析,大家现在应该都已经了解了聚集目标表在DB2中的关键作用,本文比较适合初学者学习,希望大家都能够从中收获。