Альтернатива проверке ограничений в представлениях

Итак, у меня есть две таблицы:

Requests
--------
Id
RequestSchemeId
ReceivedByUserId

ForwardedRequests
-----------------
Id
RequestId (FK to Id column of Requests Table)
ForwardedToUserId

и одно представление

ForwardedRequestsInRequestSchemes
---------------------------------
Requests.RequestSchemeId
Requests.ReceivedByUserId
ForwardedRequests.ForwardedToUserId

Каков стандартный/рекомендуемый способ добавления ограничения , эквивалентного в Requests.ReceivedByUserId! = ForwardedRequests.ForwardedToUserIdв представлении?

Я знаю, что проверочные ограничения не разрешены в представлениях. Использование SQL Server 2008.

РЕДАКТИРОВАТЬ:

Это дополнительный вопрос к этому вопросу .

Бизнес-правила:

  1. Один и тот же запрос может быть перенаправлен нескольким пользователям. Отсюда и столбец Id в таблице ForwardedRequests.

  2. Пользователь может получить только один запрос для конкретной схемы запроса. Поэтому я создал ограничение UniqueKey для RequestSchemeId+ReceivedByUserId в таблице Requests.

  3. Запрос может быть переадресован другому пользователю только в том случае, если переадресованный пользователь еще не имеет переадресованного запроса по той же схеме от любого другого пользователя. Итак, как предложил Мартин в связанном вопросе , я создал представление из двух таблиц и добавил уникальное ограничение на Requests.RequestSchemeId+ForwardedRequests.ForwardedToUserId.

  4. Бизнес-правило, о котором идет речь в этом вопросе, заключается в том, что получатель запроса не может пересылать его самому себе.

5
задан Community 23 May 2017 в 12:21
поделиться