【问题标题】:Only allow one of two columns to be set只允许设置两列之一
【发布时间】:2014-08-05 12:26:08
【问题描述】:

我正在 SQL 表中寻找一个约束,它只允许每行设置两个可为空的列之一。两列都是与不同表相关的外键。

例如,假设每个表格行描述一段旅程。我为Cars 和Planes 准备了一个单独的表格。

如果不重新设计我的整个数据库以使用 Vehicles 表,我如何确保每个旅程行由 任一 CarID 或 @987654325 完成@,但永远不会同时发生,也永远不会?

【问题讨论】:

  • 重新设计使用车辆,你知道这是有道理的!
  • 呵呵,确实如此,可惜时间不在我这边。我必须说服管理层给我一些重构时间!
  • 我要告诉规范化警察!

标签: sql-server database-design sql-server-2008-r2


【解决方案1】:

添加类似这样的约束...

ALTER TABLE TableName
ADD CONSTRAINT ck_Nullable CHECK (
                                    (CarID IS NULL AND PlaneID IS NOT NULL)
                                   OR 
                                    (CarID IS NOT NULL AND PlaneID IS NULL)
                                 )

【讨论】:

    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多