Принудительное ограничение данных 1: 1 в отношении 1: M - PullRequest
0 голосов
/ 25 апреля 2011

Используя SQL Server 2K8 R2, у меня есть две связанные таблицы - Член и Анкета.Каждая таблица имеет BigInt PK с именем ID.Анкета имеет MemberID, чтобы вернуться к участнику, который находится в процессе заполнения формы. Со временем участник может заполнить анкету много раз.Бизнес-требование состоит в том, чтобы каждый участник заполнял анкету максимум один раз в год.AFAIK это не может быть решено с помощью простого CHECK CONSTRAINT.

Есть ли "чистый" способ сделать это?Я надеюсь не делать что-то вроде следующего:

CREATE TRIGGER tr_Questionnaire_Insert
  ON Questionnaire
  INSTEAD OF INSERT
AS BEGIN
  -- Check for a violation of once questionnaire per calendar year and if found, call RAISERROR

  -- Otherwise continue with INSERT
END;

Причина, по которой я не хочу использовать этот подход, в первую очередь потому, что он требует меня (или кто бы ни будет поддерживать это решение в течение длительного времени).термин) помнить, чтобы сохранить триггер, если схема для вопросника должна измениться.

1 Ответ

6 голосов
/ 25 апреля 2011

Просто создайте уникальный индекс в таблице вопросника, который включает MemberId и год.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...