
126
|
第
7
章
如果担心出现这种问题,可以把
SQL
重写为下面这样:
SELECT SUM(HASH(CONCAT(STR_COL, CONCAT(INT_COL, DOUBLE_COL))))) FROM FOO
这样一来,校验和针对的是整行记录串联起来的值,可以更好地保证数据的有效性。但是
在某些情况下,即使
SQL
返回的值是匹配的,也并不代表实际值是匹配的。这可能是因为
散列函数的实现不一样。如果存在这种情况,那么可以尝试使用自定义散列函数。
另外,尽管可能性很小,但是两个数据库的散列函数仍然有可能为相同的值返回不同的散
列值。这主要是因为每个系统采用了不同的散列实现。如果存在这种情况,那么可以使用
用户自定义函数,从而在两个系统上执行相同的散列逻辑。
7.3
小结
数据完整性是设计和实现数据系统的关键因素。本章讨论了
数据完整性
的含义,并举例说
明了如何保持数据完整性和追踪流经系统的数据的谱系。
本章还描述了
完全保真度
与
派生
的含义,然后介绍了两种构建数据管道的方法,基于需求
来确保数据完整性。
•
预定义管道
——可以预定义数据在数据管道中的移动路径、处理方式,等等。
•
数据管道的事后发现
——可以在数据通过系统后定义和验证数据谱系。
最后,本章讨论了确保数据保真度的方法,而不管数据是如何在系统中移动的。