2014-01-15 24 views
0

对措辞不佳的标题抱歉,但我无法正确表达我的意思可能是为什么我找不到与Google有关的任何内容。要求只有多列中的一列不为空

简而言之,设想一种情况,即在包含图片和相关元数据的数据库中具有名为Image的表格。照片可以是客户,他们的汽车或在车上进行的特定修理。有一些称为客户,汽车和修理的表,每个表都有自己的唯一ID列。

在Image表中,有一个名为ClientID的列,一个名为CarID的列和一个名为RepairID的列,该列将每个图像记录链接到客户端,汽车和/或修理。问题是,一张图片可能与客户和汽车有关,但不涉及维修,汽车和维修,而不是客户,或者这三者中的任何一个。换句话说,在一列,两列或三列中可能存在一个值,但必须是至少一列中的一列。只要其中一个不是NULL,另外两个就可以。

有没有办法在MSSQL中使用约束(或任何其他方法)来实现这一点?

希望下面的示例图将说明我在说什么。 enter image description here

回答

2

Image表看起来像这样创建一个约束:

Car is not null or Client is not null or Repair is not null 

DDL:

ALTER TABLE [dbo].[Image] WITH CHECK ADD CONSTRAINT [CK_Image_CarClientRepair] CHECK (Car is not null or Client is not null or Repair is not null) 
+0

这看起来很简单!您是否意识到这可能会造成任何特定的性能问题? –

+1

这几乎没有开销,这是一个微不足道的检查。 – RedFilter