三值逻辑讨论

原创 2004年09月15日 02:06:00

习惯上我们在应用系统中一直使用两值逻辑:非TrueFalse。两值逻辑的运算体系已经相当成熟,与、或、非以及衍生的异或、与非等等。但是在实际应用中,我们会有机会遇到三值逻辑。

三值逻辑通常包含可选的TrueFalseNULL。如何在完备的两值逻辑运算体系中加入这个NULL,使之满足我们的需要,并且不会引发逻辑矛盾,就是我们要在这里讨论的。

NULL参与逻辑运算时,实际上存在着不同的算法。按NULL值在运算中的“优先级”分为三种。

通常我们在数据库中使用的三值逻辑,遵循NULL最优的原则。有NULL值参与二值运算时,返回结果为NULL,其它与二值逻辑相同。这一原则基于关系型数据库NULL视为“未知”。由于其内容未知,则任何逻辑值与之进行运算的结果都是未知(无意义值),这也与许多数据关系型数据库对NULL的处理一致。

另一方面,可能有些朋友没有注意到,事实上常见的权限体系也是一种三值逻辑,这个体系里NULL值处于最低优先级,两个权限值进行合并时,False(否定)高于一切,没有否定值时,肯定值(True)高于NULL,只有两个值均为NULL时,结果才为NULL。实际上我们可以将它看作是一个三值与运算,那么出于数学上的对称,很容易可以构造出对应的逻辑或运算。这种运算规则NULL为“未赋值”

最后一种规定NULL值的优先级介于TrueFalse之间,与运算,二者有一为False时,返回False,否则二者有一为NULL时,返回NULL,二者均为True时返回True;或运算,二者有一为True时返回True,否则二者有一为NULL时返回NULL,二者均为False时返回False。这等于分别承认TrueFalse在或和与运算中的最高优先级。同样它也是基于NULL值为“未知”的理念。但是在这种规则下,对NULL值严格视为未知的TrueFalse,而第一种规则则将其视为二值逻辑之外的一个独立存在。也有一些数据库的三值逻辑是基于这个体系的,MSDN中给出了一个基于此规则的DBBool示例(用C#实现),我们在后面的讨论中会基于该示例构造一个更为全面实用的三值逻辑类。

关于NULL值的学术讨论其实一直没有休止过,这期间还出现过四元逻辑等理论。实践也证明,“真实”世界中客观存在着不止一种三值逻辑体系。在实用中应当依据具体情况选择最适合的规则。

充值系列——充值系统业务逻辑层实现(三)

x
  • a23456789zxcvbnm
  • a23456789zxcvbnm
  • 2013年12月12日 13:51
  • 2545

什么是一阶逻辑(First-order Logic)

转载:http://blog.sina.com.cn/s/blog_4e8581890102ean4.html 实际上,一阶逻辑是一种形式系统(Formal System),即形...
  • huludan
  • huludan
  • 2016年05月30日 20:38
  • 1740

逻辑地址、线性地址和物理地址的关系

、首先不得不提的历史          许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小...
  • prike
  • prike
  • 2016年10月02日 10:03
  • 2101

SQLSERVER 三值逻辑

三值逻辑 (3VL, Three-valued Logic)  在SQL中逻辑表达式的可能值包括TRUE、FALSE、UNKNOWN。他们被称为三值逻辑。三值逻辑是SQL所特有的。大多数语言的逻辑表达...
  • hennessy_han
  • hennessy_han
  • 2015年03月12日 23:02
  • 196

8. NULL与三值逻辑

http://bbs.csdn.net/topics/350013767?page=1#post-394398547 8. NULL与三值逻辑 三值逻辑(3VL, Three-va...
  • wangyanru0810
  • wangyanru0810
  • 2013年05月06日 14:32
  • 555

Oracle.三.函数、null值的处理以及逻辑操作

1.lower(列名|表达式)——把字符转换成小写 upper(列名|表达式)——把字符转换成大写 initcap(列名|表达式)——把每个字的头一个字符转换成大写其与转换成小写2.中文操作系统,...
  • king255
  • king255
  • 2015年03月07日 20:50
  • 283

【SQL学习】——第三部分:SQL数据类型与三值逻辑

7. 数据类型 在数据库理论中,关系模型和数据类型这两部分内容是正交的(参看《程序员修炼之道》第8节关于“正交性”的讨论),互不依赖。换言之,关系模型并不关心每个表的字段的数据类型是什么,是整数、...
  • carabbit
  • carabbit
  • 2011年07月31日 13:34
  • 243

SQLSERVER 三值逻辑

三值逻辑 (3VL, Three-valued Logic)  在SQL中逻辑表达式的可能值包括TRUE、FALSE、UNKNOWN。他们被称为三值逻辑。三值逻辑是SQL所特有的。大多数语言...
  • u012861978
  • u012861978
  • 2016年08月07日 20:58
  • 337

充值系列——充值系统业务逻辑层实现(三)

x
  • a23456789zxcvbnm
  • a23456789zxcvbnm
  • 2013年12月12日 13:51
  • 2545

逻辑卷管理(LVM)的深入讨论

  • 2011年04月21日 23:37
  • 33KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三值逻辑讨论
举报原因:
原因补充:

(最多只允许输入30个字)