Базой данных является MS SQLServer
Пример данных:
| Name | defaultValue | value | | one | true | valone | | one | false | valtwo | | one | false | valthree |
Я после способа ограничить таблицу, таким образом, что каждое 'Имя' может только поссориться с набором 'defaultValue' к истинному
Вы можете использовать TRIGGER для проверки этого ограничения на события обновления или вставки и отката транзакции, если она была недопустимой.
Мне понравилась идея Майкла, но она допускает только одно ложное значение для каждого имени в SQL Server. Чтобы избежать этого, как насчет использования
ALTER TABLE yourtable
ADD [ValueCheck] AS
(case [defaultValue] when (1) then ('~Default#?@') /*Magic string!*/
else value end) persisted
, а затем добавления уникального ограничения для (Name, ValueCheck).
Я предполагаю, что комбинации имени и значения будут уникальными. Если столбец значений не допускает значений NULL, то предпочтительнее использовать NULL
, а не магическую строку, в противном случае выберите строку, которая не может отображаться в данных (например, длина 101 символ, если столбец значений допускает только 100 символов)
Создайте вычисляемый столбец, подобный этому:
ALTER TABLE yourtable
ADD ValueCheck AS CASE defaultValue
WHEN true THEN 1
WHEN false THEN NULL
END
, а затем добавьте уникальное ограничение для (Name, ValueCheck)