Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Uma restrição que permite que apenas uma das duas tabelas faça referência a uma tabela base


As restrições CHECK com UDFs (que é a resposta de Oded) não são bem dimensionadas e têm baixa simultaneidade. Veja estes:
  • UDFs escalares encapsulados em restrições CHECK são muito lentos e podem falhar para atualizações de várias linhas
  • Tony Rogerson

Então:
  • crie uma nova tabela, digamos TableA2XY
  • tem o PK de TableA e uma coluna char(1) com um CHECK para permitir apenas X ou Y. E uma restrição exclusiva no PK de A também.
  • tableX e tableY têm uma nova coluna char(1) com uma verificação para permitir apenas X ou Y respectivamente
  • tableX e tableY têm seus FK para TableA2XY em ambas as colunas

Esta é a abordagem de superchave ou subtipo
  • todos baseados em DRI
  • nenhum acionador
  • sem udfs com acesso à tabela nas restrições CHECK.