Mysql
 sql >> Database >  >> RDS >> Mysql

Come mantenere il vincolo della chiave esterna su database diversi?

Non riesco a pensare a nessun modo per farlo con MySQL standard.

Potresti scrivere un plugin per MySQL Proxy , che gestisce l'integrità referenziale tra le tabelle padre e figlio su server diversi:

  • Intercetta INSERT e UPDATE contro il tavolo figlio. Query per la corrispondenza della riga nella tabella padre. INSERT non riuscito /UPDATE se nessuna corrispondenza trovata nella tabella principale.

  • Intercetta DELETE contro la tabella padre. Query per righe dipendenti nella tabella figlio. DELETE fallito se sono state trovate righe dipendenti nella tabella figlio. Se il vincolo ha lo scopo di supportare il comportamento a cascata, fallo invece di fallire.

  • Intercetta UPDATE contro la tabella padre. Se il valore della chiave primaria cambia come parte dell'aggiornamento, eseguire una query per le righe dipendenti trovate nella tabella figlio. UPDATE non riuscito se sono state trovate righe dipendenti nella tabella figlio. Se il vincolo ha lo scopo di supportare il comportamento a cascata, fallo invece di fallire.

Nota che dovresti conservare le informazioni sui vincoli di integrità referenziale nel tuo plug-in MySQL Proxy (o scrivere un file di configurazione personalizzato per il tuo plug-in che registra le relazioni). Non puoi usare la convenzionale FOREIGN KEY sintassi per dichiarare tali vincoli nelle istanze MySQL.