sql - 仅在创建时禁止空值,但在修改表时允许?
问题描述
我想知道我将如何去做以下事情。我有一张桌子,例如
CREATE TABLE person (
name varchar(128),
phone varchar(64)
);
现在我想在创建新行时在电话上强制执行 NOT NULL,但我希望以后能够修改该行并删除电话号码。在我的完整示例中,这实际上是一个外键引用,出于法律原因,将来可能必须删除外键引用的行。但是当最初输入时,我需要强制它在那里。
解决方案
正如您所描述的那样,您只能使用触发器来执行此操作。
相反,我建议该列是NOT NULL
并且您有一个“不可用”值,而不是NULL
. 如果您要存储一个字符串,那么空字符串可能就足够了。或类似的东西'REMOVED FOR PRIVACY COMPLIANCE'
。
对于外键引用,只需在引用表中有一个表示“不可用”的值。我经常给这样的值一个键-1
。这还有一个优点,即内部连接可以在不删除行的情况下工作。
在我使用的数据库中,引用表通常具有这样的值,特别是内部连接的工作。我们发现这减少了分析师和其他使用数据库的人的错误。
推荐阅读
- android - 使用 Kotlin 和 SQLite 在 Android X 中制作一个简单的可点击列表(Android Studio 4.1)
- python - 如何使用 pyppeteer 在新标签页中打开 url?
- python - Python中的不确定性包:使用给定的协方差矩阵来获取数据的不确定性
- javascript - 冒泡对组件的 HTTP 发布响应
- php - 如何防止 Firefox >80 缓存重定向目标页面?
- flutter - 在 null 上调用了 getter 'stream'
- xpath - Google 工作表上的 ImportXML 函数,用于获取 GitHub 上最后一次提交的日期
- azure-data-catalog - Azure 数据目录 Gen2 何时会正式发布?
- amazon-web-services - 在 AWS 中安排进程
- amazon-web-services - 关于 AWS S3 终端节点和权限的说明