Поэтому у меня есть две таблицы:Альтернатива для проверки ограничений в представлениях
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.
EDIT:
Это Followup вопрос this question.
Бизнес-правила:
Тот же запрос может быть пересылаются нескольким пользователям. Следовательно, столбец Идентификатор в таблице ForwardedRequests.
Пользователь может получить только один запрос для конкретной RequestScheme. Поэтому я создал ограничение UniqueKey для RequestSchemeId + ReceivedByUserId в таблице запросов.
Запрос может быть перенаправлен другому пользователю, только если переадресованный пользователь еще не отправил запрос по той же схеме от любого другого пользователя. Так как Мартин предложил в linked question, я создал представление из двух таблиц и добавил уникальное ограничение на Requests.RequestSchemeId + ForwardedRequests.ForwardedToUserId.
Деловое правило, о котором идет речь, заключается в том, что получатель запроса не может переслать его самому себе.
Почему вы не используете 'WHERE Requests.ReceivedByUserId <> ForwardedRequests.ReceivedByUserId'? – Kaf
@Kaf - Это не поможет. [Дополнительный контекст вопроса здесь] (http://stackoverflow.com/q/9749902/73226) –
@Martin Спасибо за добавление ссылки. – NVM