Bonjour à tous,
Je ne comprends pas bien comment fonctionne les clés étrangères.
J'ai une base de données représentant des biens immobiliers. Une table représente les sites, c'est-à-dire les immeubles (les biens), et s'appelle 'biens'. L'autre s'appelle 'locaux' et représente les locaux à louer (bureaux, locaux d'activités, entrepôts). Un site peut avoir plusieurs locaux. Mais un local doit forcément comporter une référence à un site (une adresse, un descriptif). Et si je supprime un bien, les locaux qu'il contient n'ont plus de raison d'être. Si la référence venait à changer, même chose : il faudrait que cela permette de changer automatiquement la référence placée sur la table 'locaux'. J'ai donc écrit la commande MySQL suivante :
J'ai alors une erreur : #1452 - Cannot add or update a child row: a foreign key constraint fails (`rubin-immo`.<result 2 when explaining filename '#sql-11e8_43'>, CONSTRAINT `fk_locaux_biens_id` FOREIGN KEY (`id_bien`) REFERENCES `biens` (`id`) ON DELETE CASCADE ON UPDATE CASCADE).
Code : Sélectionner tout - Visualiser dans une fenêtre à part ALTER TABLE locaux ADD CONSTRAINT fk_locaux_biens_id FOREIGN KEY (id_bien) REFERENCES biens(id) ON DELETE CASCADE ON UPDATE CASCADE
J'ai beau relire, je ne comprends pas du tout ce que cela signifie.
Alors, en essayant de créer la clé étrangère à partir de l'interface phpmyadmin, j'ai constaté que phpmyadmin n'acceptait les clés étrangères que pour les colonnes possédant un index. J'ai donc ajouté un index sur la colonne id_bien, comme ceci :
Ce qui ne m'a pas renvoyé d'erreur. Je suppose donc que la commande a bien fonctionné. J'ai alors rempli le formulaire placé à Structure > Vue relationnelle. Mais j'ai toujours la même erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE INDEX index_locaux ON locaux (id_bien)
Pourriez-vous m'expliquer mon erreur ?
Merci d'avance
Partager