Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment tester des tables liées avec des clés étrangères ?

Comme mentionné dans les commentaires, vous devez d'abord déposer toutes les tables avec des contraintes FK dans d'autres tables, puis vous pouvez supprimer les tables auxquelles elles sont liées.

Exemple :

User
  id: 1
  name: Mike

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

Cette configuration est une relation 1:1 (plus sur la normalisation des données ), où une ligne d'utilisateur peut faire référence à une ligne d'adresse, et parce que la ligne d'adresse dépend de l'existence de la ligne d'utilisateur, si vous essayez de supprimer la ligne d'utilisateur, vous verrez les erreurs que vous avez mentionnées.

Mais si vous supprimez d'abord la table Adresse, tout fonctionne comme prévu car la table Utilisateur n'est FK par rapport à aucune autre table.

Garantir intégrité référentielle dans votre schéma garantit que vous ne vous retrouvez pas avec des lignes orphelines, qui se répandront dans votre application pilotée par les données.

Vous pouvez également lancer les commandes suivantes :

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

Mais je déconseille fortement cela, car vous pourriez briser l'intégrité référentielle de vos données et vous retrouver dans un véritable gâchis. J'ai vu quelqu'un faire cela dans un environnement d'entreprise et il leur a fallu des semaines pour le nettoyer. Cependant, si vous le faites STRICTEMENT à des fins de test ; comme écrire des tests unitaires ou simplement apprendre, et vous ne vouliez pas supprimer les tables à chaque fois, vous pouviez faire ceci :

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

Une conception de schéma appropriée utilisant des contraintes de clé étrangère contribue à créer une bonne base pour toute application basée sur les données. Il vous faudra du temps pour comprendre quand utiliser et comment construire des contraintes de clé étrangère, mais avec le temps, vous commencerez à comprendre. Une bonne façon de commencer est de télécharger un projet open source comme magento , wordpress , ou vbulletin et jetez un oeil à leurs schémas. Vous pouvez même introspecter ces schémas en utilisant MySQL workbench et voir leurs Diagrammes Entité-Relation (ERD), qui démontrera visuellement les liens entre les tables.