gpt4 book ai didi

sql - 有没有办法使一列的可为空性取决于另一列的可为空性?

转载 作者:行者123 更新时间:2023-12-03 04:38:26 25 4
gpt4 key购买 nike

我的数据库表中有两列(其中包括):ExitDate 和 ExitReason。如果指定了 ExitDate,我们的业务逻辑要求指定 ExitReason。 ExitDate 列需要允许空值,因为插入时该值并不总是已知。有没有办法使 ExitReason 列仅在 ExitDate 值为空时才允许空值?我可以通过将这两列拆分为一个单独的“退出日期”表并使它们都不可为空来实现此效果,但如果我不必这样做,那就太好了。

想法?谢谢!

最佳答案

假设您使用的是 SQL Server 或类似的服务器,您可以使用 CHECK constraint 来执行此操作在你的 table 上。 (不幸的是,MySQL parses but ignores CHECK 约束,因此您必须使用该平台的触发器。)

如果表已经存在:

ALTER TABLE ADD CONSTRAINT CK_ExitDateReason
CHECK (
(ExitDate IS NULL AND ExitReason IS NULL)
OR (ExitDate IS NOT NULL AND ExitReason IS NOT NULL)
);

如果您自己创建表格:

CREATE TABLE dbo.Exit (
...

, CONSTRAINT CK_ExitDateReason CHECK ...
);

使用检查约束优于使用触发器,因为:

  • 检查约束比触发器更明显
  • 约束是表定义的一部分,而不是单独运行的代码,因此逻辑上更清晰
  • 我愿意打赌它也比触发器更快

关于sql - 有没有办法使一列的可为空性取决于另一列的可为空性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8014982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com