Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Un vincolo che consente solo a una delle due tabelle di fare riferimento a una tabella di base

I vincoli CHECK con le UDF (che è la risposta di Oded) non si adattano bene e hanno una scarsa concorrenza. Vedi questi:

  • Le UDF scalari racchiuse nei vincoli CHECK sono molto lente e potrebbero non riuscire per gli aggiornamenti su più righe
  • Tony Rogerson

Quindi:

  • crea una nuova tabella, ad esempio TableA2XY
  • questo ha la PK di TableA e una colonna char(1) con un CHECK per consentire solo X o Y. E anche un vincolo univoco sulla PK di A.
  • tableX e tableY hanno una nuova colonna char(1) con un segno di spunta per consentire solo X o Y rispettivamente
  • tableX e tableY hanno il loro FK su TableA2XY su entrambe le colonne

Questo è l'approccio della superchiave o del sottotipo

  • tutti basati su DRI
  • nessun trigger
  • nessun udf con accesso alla tabella nei vincoli CHECK.