2014-01-15 3 views
0

Извинения за плохо сформулированное название, но моя неспособность выразить то, что я имею в виду, вероятно, поэтому я не могу найти ничего, что связано с этим с Google.Требовать только один из нескольких столбцов не должен быть нулевым

Проще говоря, представьте ситуацию, когда у вас есть таблица с именем Image в базе данных, в которой хранятся изображения и связанные метаданные. Фотография может быть клиента, их автомобиля или конкретного ремонта, выполняемого на автомобиле. Существуют таблицы под названием «Клиент», «Автомобиль» и «Ремонт», каждый со своей уникальной колонкой идентификаторов.

В таблице изображений есть столбец с именем ClientID, столбец с именем CarID и столбец с именем RepairID, который связывает каждую запись изображения с клиентом, автомобилем и/или ремонтом. Проблема в том, что изображение может относиться к клиенту и машине, но не к ремонту, а также к автомобилю и ремонту, но не к клиенту, или только к одному из этих трех. Другими словами, может быть значение в одном, двух или трех столбцах, но там ДОЛЖЕН быть столбец в AT LEAST ONE. Пока один не является 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

Смежные вопросы