前面有'NOT'的SQL完整性约束

时间:2014-04-23 01:26:15

标签: mysql sql oracle

我很难理解这些陈述的完整性约束 鉴于声明

  

“如果年龄低于5岁,则价格必须超过5000美元”   以下是IC的

CHECK (NOT (age < 5 AND price <= 5000)) 

CHECK (NOT (age >=5 OR price > 5000)
  

以及此声明   “如果类型是'SUV'那么价格必须超过10000美元但不到30000美元”

CHECK (NOT (type = 'SUV' AND (price <=10000 OR price >= 30000"

CHECK (((type<> 'SUV') OR (price > 10000 AND price < 30000))

我无法理解为什么'NOT'放在IC的前面以及最后一个中的&lt;&gt;('not equal')。似乎它否定了约束应该是什么。 “检查(不是(年龄&gt; = 5或价格> 5000))”似乎应该是(年龄<= 5或价格> 5000)。“检查(((类型&lt;&gt;'SUV')或(价格&gt; 10000 AND price&lt; 30000))。“这让我感到困惑,因为它说”类型不等于SUV,或者价格大于10,000,价格小于30,000。“不应该是类型相等SUV然后是第二部分?

1 个答案:

答案 0 :(得分:1)

这是基本的布尔布尔逻辑。以下是同样的事情:

CHECK (NOT (age >= 5 AND price < 5000) )
CHECK (age < 5 OR price >= 5000)

这两个都在你描述时实现约束:如果年龄&lt; 5然后价格&gt; = 5000。

NOT就在那里,因为有些人理解这种情况说你不能同时年龄≥> 5和价格&lt; 5000。