Создать ограничение T-SQL, чтобы предотвратить количество дублирующихся записей в таблице? - PullRequest
1 голос
/ 21 сентября 2010

В table A У меня есть 2 столбца:

ID (int, PK)
MaxUsers (int)

В table B У меня есть 2 столбца:

ItemID (int)
UserID (int)

Количество записей в table A с совпадающими ItemID не может превышать значение MaxUsers.

Можно ли написать ограничение таблицы T-SQL, чтобы физически это никогда не происходило?

Ура! Curt

Ответы [ 2 ]

3 голосов
/ 21 сентября 2010

Вы можете написать триггер при вставке / обновлении, который выполняет откат запроса, когда условия больше не выполняются.

1 голос
/ 21 сентября 2010

Вы можете сделать это с помощью ограничений 'vanilla', например, ограничения на уровне строк CHECK, ограничения UNIQUE, FOREIGN KEYS, что делает его легко переносимым, например

CREATE TABLE TableA 
(
 ID INTEGER NOT NULL PRIMARY KEY,
 MaxUsers INTEGER NOT NULL CHECK (MaxUsers > 0), 
 UNIQUE (ID, MaxUsers)
);

CREATE TABLE TableB
(
 ID INTEGER NOT NULL,
 MaxUsers INTEGER NOT NULL, 
 FOREIGN KEY (ID, MaxUsers) 
    REFERENCES TableA (ID, MaxUsers), 
 ID_occurrence INTEGER NOT NULL, 
 CHECK (ID_occurrence BETWEEN 1 AND MaxUsers), 
 UNIQUE (ID, ID_occurrence)
);

Для поддержки ID_occurrenceпоследовательность, вы можете создать «вспомогательный» хранимый процесс или триггер.

...