Je pense que ce que vous dites est que pour toute question active, le tuple (surveyDomain, surveyQuestion, surveyAnswer) doit être unique? En d'autres termes, l'enquête: surveyanswer est 1: 1 si l'enquête est active, même si l'enquête: surveyanswer est établie à 1: plusieurs.
Si oui, la réponse est de changer la structure de votre table. L'ajout d'une colonne activeAnswerId Nullable à l'enquête rendra effectivement la relation 1: 1; votre contrainte existante SurveyId (ou SurveyId unique, SurvetDomainId) suffira à renforcer l'unicité.
En effet, à moins que je ne sois mal compris, je suis surpris que Survey ait une colonne Question; Je m'attendrais à ce que Survey: Question soit 1: beaucoup (un sondage a beaucoup de questions) ou même beaucoup: beaucoup, si une question peut apparaître sur plus d'un sondage. Plus généralement, je pense que la raison pour laquelle il est difficile de déterminer comment appliquer la contrainte et nécessite des déclencheurs "héroïques" ou des fonctions définies par l'utilisateur, est un symptôme d'un schéma qui ne modélise pas correctement votre domaine de problème.
commentaires OP:
non, vous rater. Enquête: La réponse est 1: n. « Question » est la question de l'enquête - Tuple serait (SurveyDomain.SurveyDomainId, Survey.Answer)
Vous voulez dire que pour chaque domaine, il y a au plus une réponse? Encore une fois, en regardant votre schéma, c'est au mieux trompeur. Un SurveyDomain a de nombreuses enquêtes (dont chacune a une colonne Question) et un sondage a de nombreuses réponses? (Schema)
Mais si le bit actif de l'enquête est défini, il ne devrait y avoir qu'une seule réponse?
Est-ce qu'un sondage a été trompé?
On ne sait vraiment pas ce que vous essayez de modéliser.
Encore une fois, s'il est difficile d'ajouter une contrainte, cela suggère que votre modèle ne fonctionne pas.
Pouvez-vous fournir le DDL? Quelles sont vos clés primaires? –
J'ai ajouté le DDL de la manière la plus simple possible ... :) – TheSoftwareJedi