Итак, у меня есть две таблицы:
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.
РЕДАКТИРОВАТЬ:
Это дополнительный вопрос к этому вопросу .
Бизнес-правила:
Один и тот же запрос может быть перенаправлен нескольким пользователям. Отсюда и столбец Id в таблице ForwardedRequests.
Пользователь может получить только один запрос для конкретной схемы запроса. Поэтому я создал ограничение UniqueKey для RequestSchemeId+ReceivedByUserId в таблице Requests.
Запрос может быть переадресован другому пользователю только в том случае, если переадресованный пользователь еще не имеет переадресованного запроса по той же схеме от любого другого пользователя. Итак, как предложил Мартин в связанном вопросе , я создал представление из двух таблиц и добавил уникальное ограничение на Requests.RequestSchemeId+ForwardedRequests.ForwardedToUserId.
Бизнес-правило, о котором идет речь в этом вопросе, заключается в том, что получатель запроса не может пересылать его самому себе.