Я столкнулся с базой данных в моей текущей позиции, которая нуждается в распределении TLC, чтобы сказать, что существует множество перекрестных справочных таблиц, имеющих одинаковые структурная схема, и все, используя триггеры для принудительной реализации бизнес-логики или целостности домена, казалось бы. Я пытаюсь выяснить, могу ли я заменить некоторые триггеры ограничениями. Ниже приведено типичное определение таблицы, соответствующее этому шаблону. Существует около 400 таких таблиц, которые все используют одно и то же решение на основе триггеров.Как настроить дополнительное ограничение для отношений «один-ко-многим» без использования триггеров
CREATE TABLE dbo.FooXRef
(
FooXRefID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
BarID INT NOT NULL CONSTRAINT [fk_Bar] FOREIGN KEY REFERENCES dbo.Bar(BarID),
DefaultRecord BIT NOT NULL CONSTRAINT [DF_FooXRef_Default] DEFAULT(1)
);
Правило быть может существовать бесконечное число записей с одинаковым значением в BarID
и DefaultRecord = 0
, но только одна запись может существовать, где BarID
находится в таблице и DefaultRecord = 1
.
Какое ограничение мне нужно настроить для этой комбинации?
Эта структура таблицы и триггер для принудительной реализации этой комбинации - 400 в текущей базе данных, а в следующем я берусь в тысячах. Невозможно ли установить ограничение, которое будет работать для этого случая?
К сожалению, на основании примера вы должны поддерживать это программно. –
Имеет ли пример [здесь] (https://technet.microsoft.com/en-us/library/ms188258%28v=sql.105%29.aspx) какие-либо идеи? – HABO