Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Une contrainte qui n'autorise qu'une des deux tables à référencer une table de base

Les contraintes CHECK avec UDF (qui est la réponse d'Oded) ne s'adaptent pas bien et ont une faible simultanéité. Voir ceux-ci :

  • Les UDF scalaires enveloppées dans des contraintes CHECK sont très lentes et peuvent échouer pour les mises à jour multilignes
  • Tony Rogerson

Donc :

  • créez une nouvelle table, dites TableA2XY
  • ceci a le PK de TableA et une colonne char(1) avec un CHECK pour autoriser uniquement X ou Y. Et une contrainte unique sur le PK de A aussi.
  • tableX et tableY ont une nouvelle colonne char(1) avec une coche pour n'autoriser que X ou Y respectivement
  • tableX et tableY ont leur FK à TableA2XY sur les deux colonnes

C'est l'approche de la super clé ou du sous-type

  • tous basés sur DRI
  • aucun déclencheur
  • pas d'udfs avec accès à la table dans les contraintes CHECK.