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

Come testare le tabelle collegate a chiavi esterne?

Come accennato nei commenti, devi prima eliminare tutte le tabelle con vincoli FK su altre tabelle, quindi puoi eliminare le tabelle a cui sono collegati.

Esempio:

User
  id: 1
  name: Mike

Address 
  id: 1
  user_id: 1 (FK constraint to User.id table.column)
  address_1: 555 Main Street

Questa configurazione è una relazione 1:1 (ulteriori informazioni sulla normalizzazione dei dati ), dove una riga utente può fare riferimento a una riga di indirizzo e poiché la riga di indirizzo dipende dall'esistenza della riga utente, se tenti di rimuovere la riga utente, vedrai gli errori che hai menzionato.

Ma se elimini prima la tabella Address, tutto funziona come previsto perché la tabella User non è FK su nessun'altra tabella.

Garantire integrità referenziale all'interno del tuo schema ti assicura di non ritrovarti con righe orfane, che permeeranno in tutta l'applicazione basata sui dati.

Potresti anche impartire i seguenti comandi:

SET foreign_key_checks = 0;
# Do Stuff
SET foreign_key_checks = 1;

Ma lo sconsiglio vivamente, poiché potresti rompere l'integrità referenziale dei tuoi dati e finire in un vero pasticcio. Ho visto qualcuno farlo in un ambiente aziendale e ci sono volute settimane per ripulirlo. Tuttavia, se lo stai facendo STRETTAMENTE a scopo di test; come scrivere unit test o semplicemente imparare, e non volevi abbandonare le tabelle ogni volta, potresti farlo:

# Because we remove the foreign key check, we can truncate in any order
SET foreign_key_checks = 0;
TRUNCATE TABLE user;
TRUNCATE TABLE address;
SET foreign_key_checks = 1;

La corretta progettazione dello schema utilizzando i vincoli di chiave esterna consente di creare una buona base per qualsiasi applicazione basata sui dati. Ci vorrà del tempo per capire quando usarlo e come costruire vincoli di chiave esterna, ma col tempo inizierai a capire. Un buon modo per iniziare è scaricare un progetto open source come magento , wordpress o vbulletin e dai un'occhiata ai loro schemi. Puoi persino esaminare questi schemi utilizzando MySQL workbench e visualizza i loro Diagrammi Entity-Relationship (ERD), che dimostreranno visivamente i collegamenti tra le tabelle.