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

A restrição de chave estrangeira pode causar ciclos ou vários caminhos em cascata?


O SQL Server faz uma simples contagem de caminhos em cascata e, em vez de tentar descobrir se realmente existem ciclos, ele assume o pior e se recusa a criar as ações referenciais (CASCADE):você pode e ainda deve criar as restrições sem as ações referenciais. Se você não puder alterar seu design (ou isso comprometeria as coisas), considere usar gatilhos como último recurso.

FWIW resolvendo caminhos em cascata é um problema complexo. Outros produtos SQL simplesmente ignorarão o problema e permitirão que você crie ciclos, caso em que será uma corrida para ver qual substituirá o valor por último, provavelmente por ignorância do designer (por exemplo, ACE/Jet faz isso). Entendo que alguns produtos SQL tentarão resolver casos simples. O fato permanece, o SQL Server nem tenta, é ultra seguro ao não permitir mais de um caminho e pelo menos ele informa isso.

A própria Microsoft aconselha o uso de gatilhos em vez de restrições FK.