首页 > 解决方案 > 仅在创建时禁止空值,但在修改表时允许?

问题描述

我想知道我将如何去做以下事情。我有一张桌子,例如

CREATE TABLE person (
  name varchar(128),
  phone varchar(64)
);

现在我想在创建新行时在电话上强制执行 NOT NULL,但我希望以后能够修改该行并删除电话号码。在我的完整示例中,这实际上是一个外键引用,出于法律原因,将来可能必须删除外键引用的行。但是当最初输入时,我需要强制它在那里。

标签: sqlpostgresqlconstraints

解决方案


正如您所描述的那样,您只能使用触发器来执行此操作。

相反,我建议该列是NOT NULL并且您有一个“不可用”值,而不是NULL. 如果您要存储一个字符串,那么空字符串可能就足够了。或类似的东西'REMOVED FOR PRIVACY COMPLIANCE'

对于外键引用,只需在引用表中有一个表示“不可用”的值。我经常给这样的值一个键-1。这还有一个优点,即内部连接可以在不删除行的情况下工作。

在我使用的数据库中,引用表通常具有这样的值,特别是内部连接的工作。我们发现这减少了分析师和其他使用数据库的人的错误。


推荐阅读