SQL采用的三值逻辑属于“非古典逻辑”这一比较新的逻辑学流派。在逻辑学的发展过程中,长期占据统治地位的是古典逻辑学。它以二值逻辑为前提,认为对于命题,我们一定能判断真假。但在二十世纪二十年代,逻辑学又有了革命性的发展。
适当地抛开命题的真假吧
为了兼容NULL,关系数据库选择了允许空值(unkown)的三值逻辑来代替标准的二值逻辑。在一般的逻辑学中,命题只包含“真”和“假”这两个可能值。而三值逻辑除了这两个值,还增加了表示“未知”状态的第三个值。据说,但丁途径的地狱之门上写着这样的话:“进入此门者,先抛开所有的希望吧”。那么,三值逻辑的大门上大概写着这样的话吧:“进入此门者,先适当地抛开命题的真假吧”。
本节,我们暂时把关系数据库搁置一边,来回顾以下“三值逻辑”这一奇妙的理论体系的背景,即逻辑学的发展历史,借此从不同的角度深入理解三值逻辑体系的意义,以及为什么SQL和数据库选择了这一体系等。
历史上最早提出三值逻辑体系的是波兰的著名逻辑学家扬·武卡谢维奇。他和提出模型论的阿尔弗雷德·塔尔奇基,以及斯塔尼斯瓦夫·烈斯涅夫斯基等著名的数学家一道,开启了战争期间波兰数学和哲学发展的黄金时期。函数式语言中用到的波兰式写法(把“3+2”写成“+3 2”)也是由他提出的,他的一些其他贡献直到现在仍然被广泛应用着。
在二十世纪二十年代,他定义了“真”和“假”之外的第三个逻辑值“可能”。此前的逻辑学中,命题取“真”“假”之外的其他值,根本就是无法想象的。当时的主流观念认为,如果命题是一种描述事实的语句,那么当然必须是有真假的。
如果阅读过武卡谢维奇的论文,我们会发现他用来表达第三个值的分类其实包含在科德提出的“未知”分类里。他曾举过这样一个例子:关于未来某个时间自己在哪里的陈述,我们现在既无法确定它为真,又无法确定它为假。
武卡谢维奇考虑的“可能”这一真值的本质,其实是对未来不确定性的描述,丝毫没有科德提出的“不适用”的含义。第二个论点突破了一个命题只能有一个固有真值的观念,开拓出了新的思路,认为命题的真值可能会随时间发生“可能”->“真”,或者“可能”->“假”这样的变化。这是站在传统逻辑学的立场上无法想象的革命性的(或者说是超越常识的)的思维方式。虽然武卡谢维奇自身并没有写明其思考延申到了这么细致的地方,但是他确实表达过相近的观点——他认为命题的作用其实不在于表达事实,而在于反映人们对这件事实的认知。按照这个观点理解,命题其实不存在于客观世界,而是存在于我们的内心。
从提出这样一个心理学式命题理论的贡献来看,逻辑学家武卡谢维奇确实可以说是科德的前辈,为关系数据库奠定了理论基础。
逻辑学的革命
那么,为什么三值逻辑刚好诞生于这个时期呢?这是因为,在逻辑学发展史上,二十世纪二三十年代刚好是掀起批判古典逻辑学运动的“革命时期”。除了三值逻辑,还有布劳沃(Brouwer)和海廷(Heyting)等人创立的直觉主义逻辑学。三值逻辑通过导入第三个真值,从语义学的角度对二值逻辑发起了挑战;而直觉主义从语法学的角度对二值逻辑发起了挑战。自此,非古典逻辑学以催枯拉朽之势一扫十九世纪后期以来逻辑学停滞不前的阴霾,迎来了百花齐放的春天。
古典逻辑学最受批判的理论是排中律(AV~A),以及支撑它的二值原理。排中律是一条公理,意思是“A或者非A总有一个成立”。二值原理的意思是“一个命题必然有真假”。虽然二值原理非常简洁,但是对于我们人类而言,并不能那么轻易地认同它。在这个充满不确定性的世界里,无法判断真假的命题难道不是很多吗?
人类的逻辑学
在这种新的逻辑学中,命题的真值不仅有“真”和“假”,还可以有“无意义”“当前未知”“矛盾”等反映各种认知的值。于是,三值逻辑诞生了,而且允许三个以上的真值的多值逻辑学(many-valued logic)的研究也在进行中。没有神的逻辑学——人类的逻辑学诞生了。
数据库的使用者当然是人类,而不是神。因此,数据的表达方式也应该基于有限且不完美的人类的认知,而不是神的完美无缺的认知。这就是关系数据库采用三值逻辑的原因。正如哲学家汉斯·赖兴巴赫(Hans Reichenbach)所言,三值逻辑非常适合用来表示人类的认知或知识。
如果二分法能够推导出满足人类行动不可或缺的知识体系,那我们就可以认为分类恰当。我们在日常语言和古典科学中采用二值逻辑,就是这个原因。不过,有时或许我们感觉二值逻辑不太适合某些特定目的。在这种情况下,最好将命题分成三类。这时,我们就应该毫不犹豫地采用三值逻辑,抛弃排中律。
但是,这种面向人类的思维方式是一把双刃剑。确实,通过采用三值逻辑(主要是NULL和unkown),关系数据库会如科德所言,变得非常接近人类的认知,而且有非常灵活的表达能力,但讽刺的是,同时人类也不得不引入许多不太直观的奇怪的逻辑运算。




