2015-01-17 7 views
0

У меня есть следующие схемы таблицы:SQL Проверочное ограничение на основе графов

CREATE TABLE saved_custom_view (
[saved_custom_view_id] BIGINT   IDENTITY (1, 1) NOT NULL,   
[user_id]    BIGINT   NULL, 
[name]     NVARCHAR (250) NOT NULL, 
[is_default_view]  BIT    NOT NULL DEFAULT 0 
CONSTRAINT [PK__saved_custom_view] PRIMARY KEY CLUSTERED ([saved_custom_view_id] ASC),  
CONSTRAINT [FK__saved_custom_view__user] FOREIGN KEY ([user_id]) REFERENCES [user] ([user_id]),  

);

Я хочу убедиться, что ни один пользователь не имеет более одной строки с is_default_value, установленным в true. Следовательно, вторая вставка здесь должна быть предотвращена с помощью надлежащего ПРОВЕРКИ КОНСТРУКЦИИ.

insert into saved_custom_view values (1, 'test', 1) 
insert into saved_custom_view values (1, 'test', 1) 

Как написать контрольное ограничение для этого?

ALTER TABLE saved_custom_view 
ADD CONSTRAINT CK_no_user_has_duplicate_default_views CHECK (
    -- what goes here? 
); 

Или есть способ сделать уникальную проверку против нескольких столбцов?

+0

Вы должны пометить свой вопрос соответствующей базой данных. –

ответ

2

Вы можете просто использовать фильтрованную уникальный индекс:

create unique index idx_save_custom_view_u1 on 
    saved_custom_view(user_id, is_default_value) 
    where is_default_value = 1; 

Они описаны более подробно here.

+0

Спасибо! Это решило это. –

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