我对这个声明以及为什么它是真的感到困惑。
如果类型是“稀有”,则价格必须超过 500 美元
这个条件符合它,但我很困惑如何。
CHECK (type <> 'rare' OR price > 500)
这个问题也是, 如果类型是“新颖”,那么价格必须在 10 美元以上但低于 30 美元。
CHECK ((type <> 'novel') OR (price > 10 AND price < 30))
我对这个声明以及为什么它是真的感到困惑。
如果类型是“稀有”,则价格必须超过 500 美元
这个条件符合它,但我很困惑如何。
CHECK (type <> 'rare' OR price > 500)
这个问题也是, 如果类型是“新颖”,那么价格必须在 10 美元以上但低于 30 美元。
CHECK ((type <> 'novel') OR (price > 10 AND price < 30))
“A 或 B”意味着这些陈述中至少有一个是正确的。如果 A 不为真(type = 'rare'),则 B 必须为真(价格 > 500)才能满足条件。您拥有的第二个陈述具有完全相同的逻辑。
很难从概念上理解为什么它们是等价的。从四个可能的条件开始可能会有所帮助,相对于:如果类型是,rare
那么价格必须超过 500 美元。
Type = 'rare', price > $500: True
Type <> 'rare', price > $500: True
Type = 'rare', price <= $500: False
Type <> 'rare', price <= $500 True
你可以对 (type <> 'rare' OR price > 500` 进行同样的练习,你会发现它们在逻辑上是等价的。
为什么?直观地说,“if type is rare
then price must be over $500”只是“关心”类型是否稀有。如果该类型不是罕见的,则该陈述为真。同样,如果价格大于 500 美元,那么它总是正确的。该check
表达式只是捕获这两个条件。