Я думаю, что вы говорите, что для любого активного вопроса кортеж (surveyDomain, surveyQuestion, surveyAnswer) должен быть уникальным?
Или, другими словами, опрос: surveyanswer равен 1: 1, если опрос активен, даже если опрос: surveyanswer установлен на 1: много.
Если это так, ответ - изменить структуру таблицы. Добавление в опрос обнуляемого столбца activeAnswerId эффективно приведет к соотношению 1: 1; вашего существующего ограничения уникальный SurveyId (или уникальный SurveyId, SurvetDomainId) будет достаточно для обеспечения уникальности.
Действительно, если только я не неправильно понял, я удивлен, что в Survey есть колонка Вопроса; Я ожидаю, что Опрос: Вопрос будет 1: много (в опросе много вопросов) или даже много: много, если вопрос может появиться в нескольких опросах.
В более общем смысле, я подозреваю, что причина того, что выяснение того, как применить ограничение, трудна и требует «героики», такие как триггеры или пользовательские функции, является признаком схемы, которая не точно моделирует вашу проблемную область.
OP комментарии:
нет, вы упускаете это. Опрос: Ответ 1: n. «Вопрос» - это вопрос опроса. Кортеж будет (SurveyDomain.SurveyDomainId, Survey.Answer)
Вы имеете в виду, что для каждого домена есть не более одного ответа? Опять же, глядя на вашу схему, она в лучшем случае вводит в заблуждение. SurveyDomain имеет много опросов (в каждом из которых есть столбец «Вопрос»), а опрос содержит много ответов? ( Схема )
Но если установлен активный бит опроса, должен быть только один ответ?
Является ли опрос неправильным вопросом для вопроса?
Не совсем понятно, что вы пытаетесь смоделировать.
Опять же, если сложно добавить ограничение, это говорит о том, что ваша модель не работает.