【发布时间】:2012-05-03 15:55:33
【问题描述】:
我很想知道是否可以在 sql 中创建条件非空约束?换句话说,是否可以创建一个约束,使得 B 列可以为空,只要 A 列包含让我们说“新”,但如果 A 列的内容更改为其他内容,那么 B 列不再允许为空?
为了扩展这一点,只要 A 列显示“新”,就有可能使 B 列必须为空或为空?
谢谢大家:D
【问题讨论】:
-
FWIW,我认为大多数数据库设计人员不会将此称为条件约束。 我会 可能只是将其称为约束,但如果我必须对其进行更多限定,我可能会将其称为多列约束或多列 CHECK() 约束。这是标准 SQL。
-
@Catcall: Chris Date 引用:“这样的约束有时被非正式地称为元组约束或 SQL 中的行约束——尽管后一个术语也用于 SQL 中,更具体地说,不能被表述为列约束的行约束......然而,所有这样的用法都被弃用了,因为约束约束更新并且......在关系世界中没有元组或行级别更新这样的东西。“
-
@onedaywhen:我没有当前版本。在第 7 版中,我在这里看到的(除了 NULL)看起来像他所说的 relvar 约束(p253)。它可以容纳多个列,他说它可以任意复杂(我想这意味着它可以引用其他关系、视图、聚合和月相)。
-
在那段中,他还说,“特别注意,可以通过单独检查该元组来检查给定的供应商元组——无需查看relvar 或数据库中的任何其他 relvar。” (听起来是件好事。)我认为“所有此类用法”是指“不能被表述为列约束的行约束”,而不是引用其他列的列约束.但我可能是错的。
标签: sql constraints notnull