Postgresql postgres添加约束,以确保在另一列不为null的情况下一列不为null

Postgresql postgres添加约束,以确保在另一列不为null的情况下一列不为null,postgresql,constraints,Postgresql,Constraints,博士后9.3 我有两个整型列“a”和“b”。有效选项包括: “a”为空,“b”为空 “a”不为空,“b”为空 “a”不为空,“b”不为空 我正在尝试添加一个检查/约束,以防止无效选项: “a”为空,“b”不为空 如果有任何帮助,我将不胜感激 提前谢谢 Dan看起来您的情况实际上是一种逻辑含义:如果a为空,则b为空。从我们的符号逻辑课程(我的例子是PHIL 140),我们知道: (P -> Q) <-> (-P | Q) 因此,一个简单的检查(a不为null或b为nul

博士后9.3

我有两个整型列“a”和“b”。有效选项包括:

  • “a”为空,“b”为空
  • “a”不为空,“b”为空
  • “a”不为空,“b”不为空
我正在尝试添加一个检查/约束,以防止无效选项:

  • “a”为空,“b”不为空
如果有任何帮助,我将不胜感激

提前谢谢
Dan

看起来您的情况实际上是一种逻辑含义:如果
a为空
,则
b为空
。从我们的符号逻辑课程(我的例子是PHIL 140),我们知道:

(P -> Q) <-> (-P | Q)
因此,一个简单的
检查(a不为null或b为null)
约束就足够了


演示:

感谢您的快速响应,我一直在尝试检查它不是无效选项,而不是检查它是正确选项之一。谢谢,这是一个非常简洁的解决方案。遗憾的是没有隐含运算符,我的检查约束充斥着
-(p->Q)(-p|Q)
comments来提醒自己逻辑到底表达了什么。@muistooshort:你可以使用
P::int-Q::int@shaunc:我尽量避免添加自己的操作员,这样可以减少随身携带的行李。我可能会选择
-P::int+Q::int>=0
,因为它更容易识别,因为我已经使用了
-P | Q
很多次:)听起来不错:)--请确保用括号括起来
(P -> Q) <-> (-P | Q)
a is not null or b is null