Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie teste ich mit Fremdschlüsseln verknüpfte Tabellen?

Wie in den Kommentaren erwähnt, müssen Sie zuerst alle Tabellen mit FK-Contraints auf andere Tabellen löschen, dann können Sie die verknüpften Tabellen löschen.

Beispiel:

User
  id: 1
  name: Mike

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

Dieses Setup ist eine 1:1-Beziehung (mehr zur Datennormalisierung ). ), wobei eine Benutzerzeile auf eine Adresszeile verweisen kann, und da die Adresszeile vom Vorhandensein der Benutzerzeile abhängt, werden die von Ihnen erwähnten Fehler angezeigt, wenn Sie versuchen, die Benutzerzeile zu entfernen.

Aber wenn Sie zuerst die Address-Tabelle löschen, funktioniert alles wie erwartet, da die User-Tabelle kein FK zu irgendeiner anderen Tabelle ist.

Gewährleistung der referenziellen Integrität innerhalb Ihres Schemas stellt sicher, dass Sie nicht mit verwaisten Zeilen enden, die sich durch Ihre datengesteuerte Anwendung ziehen.

Sie können auch die folgenden Befehle ausführen:

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

Davon würde ich jedoch dringend abraten, da Sie die referentielle Integrität Ihrer Daten brechen und in einem echten Chaos enden könnten. Ich habe jemanden gesehen, der dies in einer Unternehmensumgebung getan hat, und es hat Wochen gedauert, es zu bereinigen. Wenn Sie dies jedoch STRENG tun zu Testzwecken; wie Unit-Tests zu schreiben oder einfach nur zu lernen, und Sie wollten nicht jedes Mal die Tabellen löschen, Sie könnten dies tun:

# 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;

Das richtige Schemadesign mit Fremdschlüsselbeschränkungen trägt dazu bei, eine gute Grundlage für jede datengesteuerte Anwendung zu schaffen. Es wird einige Zeit dauern, bis Sie wissen, wann Sie Fremdschlüssel verwenden und wie Sie Fremdschlüsselbeschränkungen erstellen, aber mit der Zeit werden Sie anfangen zu verstehen. Ein guter Einstieg ist das Herunterladen eines Open-Source-Projekts wie magento , wordpress , oder vbulletin und werfen Sie einen Blick auf ihre Schemata. Sie können diese Schemas sogar mit der MySQL-Workbench überprüfen und sehen Sie sich ihre Entity-Relationship-Diagramme an (ERDs), die Verbindungen zwischen Tabellen visuell demonstrieren.