Я читал много сообщений здесь о SO о создании ограничений или индексированных представлений, но я никогда не писал сложного ограничения раньше, и я надеюсь, что кто-то скажет мне, лучший подход для этого. У меня в основном есть таблица со структурой вроде ниже, и в записи может быть только один активный администратор.SQL Server 2005 создает ограничение или индексированное представление
Id Admin
-- ------
1 1
1 null
1 null
2 1
2 null
2 null
Я начал писать только регулярное заявление ограничения, но быстро понял, что это не будет работать, потому что множество нулевых значений не являются уникальными. Есть ли способ изменить это ограничение, чтобы запретить/игнорировать нули?
ALTER TABLE dbo.table
ADD CONSTRAINT OnlyOneAdmin UNIQUE(Id, Admin)
Основываясь на моих исследованиях кажется хорошим вариантом индексированный вид, но я обеспокоен тем, что создание этой точки зрения было бы ввести слишком много накладных расходов. И я не уверен, что нижеследующее представление структурировано правильно для достижения желаемых результатов.
CREATE VIEW AdminView WITH SCHEMABINDING AS
SELECT Admin
FROM dbo.table
WHERE Admin IS NOT NULL;
GO
CREATE UNIQUE CLUSTERED INDEX AdminUnique
ON dbo.AdminView(Admin);
Любые рекомендации приветствуются, заблаговременно.
Дополнительный вопрос: Было бы лучше использовать вычисленный столбец для этого?
Не уверен, что это сработает, но это должно быть: 'Id' вместо' Admin': 'CREATE VIEW AdminView С СХЕМЫ ЗАПИСИ В КАЧЕСТВЕ SELECT Id FROM dbo.table WHERE Admin IS NOT NULL;' и 'CREATE UNIQUE CLUSTERED INDEX AdminUnique ON dbo.AdminView (Id); ' –