Как организовать недопуск повторяющихся записей?

Есть таблица:

(
     RECORD_ID int IDENTITY -- номер записи
    ,AREA_ID nvarchar(50) NOT NULL -- код участа
    ,[YEAR] int NOT NULL -- год запланированных работ
    ,[MONTH] int NOT NULL -- месяц запланированных работ
    ,WORK_TYPE_ID int NOT NULL -- тип запланированных работ
    ,AMOUNT float NOT NULL -- количество запланированных  работ в ед.изменения

);

Операторы заполняют её согласно плану предприятия. У меня трудности с организацией уникальности записей Суть в том что если внесена запись по определенному типу работ в определнные год и месяц, нужно запретить повторный ввод.

Мне в голову приходит создание составного первичного ключа, включающего AREA_ID, YEAR, MONTH, WORK_TYPE_ID. Либо написание триггера на обработку вставки, но в мс сервере нет аргумента BEFORE. Есть еще вариант через буферную таблицу, но полагаю что есть вариант проще.


Ответы (1 шт):

Автор решения: Герман Борисов

Мне в голову приходит создание составного первичного ключа

Вам нужен не первичный, а альтернативный ключ. В SQL они реализуются через UNIQUE CONSTRAINT.

Насколько я помню, в MS SQL он реализуется специальным автогенерируемым системным триггером, и не обязан иметь индекс. Хотя если в таблице записей больше сотни, то индекс желателен.

→ Ссылка