这个算法本身并不难,就从那个大家都喜欢的例子来开始细说。

说对于关系模式 ,有函数依赖

要判断

是不是一个无损连接的分解;换言之,要判断是否

成立。这里的 ,所以也就是判断

是否成立。我们把等式左半边写作 ,代表 在分解 上的投影连接。

能看出来, 中的元组必定包含在 中,所以需要判断的是 中的元组必定是 中的元组。

怎么判断呢? 中的元组都是 中元组的一些局部再自然连接得来的。如果我们假设 中有一不存在于 中的元组 ,它是由什么得来的?

来自 中的各个元组的连接,比如作为 的一个元组的 ;显然, 必定是由 和类似的 进行自然连接的结果。而 来自于 中的某个元组的投影,我们不妨称 中的这个元组为 ;对于这个元组,我们知道它在属性集 上的取值必定是 .类似地,我们可以得到其它的 所来自的元组 在各属性集上的取值:

上表中第一行代表 ,它在 上取值 ,以此类推;空下来的格子我们还不确定。如果无损连接分解不成立,那么上面的五个元组所生成的 就的确不在 中,换言之 .当然了,这个表是平凡的;如果没有函数依赖关系,对于生成 的元组们我们就只能得出这点结论。

上的函数依赖 就是说,如果 上的任两个元组在 上取值相同,则在 上必定取值相同,也就是说,对于 中的元组 ,如果我们已经知道 上取值 (记作 ),那么 中就不存在在 上取值 的元组的 ,使得 .换言之, 中在 上取值相同的元组,在 上的取值必定相同。 都是 中的元组,它们都必须满足函数依赖。 上都取值 ,所以我们可以得出结论,它们在 上也取相同的值,这个值我们暂时还不知道。我们把它记作

再看下一个函数依赖 ,它告诉我们在 上取值相等的 上取值也相等。我们已经知道 ,所以

下一个函数依赖 .我们可以看到有四个元组在 上取值 ,它们在 上取的值也一定相等。但是这次,这个相等的值就不是我们不知道的值了:,也就是说其它三个元组在 上也必定取

中得出的结论是 一样,在 上取值 .我们所不知道的那个值 ,其实就是 自己!于是我们把表中所有的 都改写成

还有一个函数依赖 ,告诉我们 上取值

改写到这里我们就可以停一下,看看表中第三行的 .我们现在知道它的取值是 ,和那个不应该存在在 中的元组 的取值相同。 其实就是 本身!但是, 中的一个元组才对。

表中出现这样的一行,代表我们最初的假设是错误的: 中没有哪个元组不存在于 中。换言之, 中的元组必定是 中的元组。这样,我们就通过上面的步骤判断出, 的一个无损连接分解,这些步骤就是无损连接分解的判别算法,或者称为追踪算法(chase algorithm)。


以上的说明不太严谨,Jan Hidders 在 Quora 上给出了一个使用形式逻辑、更加严谨的解释