8721 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

J'ai un petit soucis que je n'arrive pas à résoudre, peut-etre avez vous la solution.
Je vous explique le contexte.

J'ai une base de données avec:
- une table Voitures [id, type, motorisation, ...]
- une tables Acquereurs [id, nom, prenom, fichier1, fichier2, fichierX, ..., id_voiture]
- une table Fichiers [id, mimtype, chemin, ...] (qui regroupe de des chemins vers des fichiers. Par contre il y a des fichiers en rapport avec la partie Acquéreurs mais aussi d'autres parties dont je ne parle pas)

Les clés étrangères:
voiture.id => acquereurs.id_voiture
acquereurs.fichier1 => fichiers.id
acquereurs.fichier2 => fichiers.id
acquereurs.fichierX => fichiers.id


Quand je supprime une voiture, les acquéreurs sont bien supprimés par contre les fichiers acquéreurs ne sont pas supprimés.

Quel est la solution pour faire supprimer les fichiers associés a l'acquéreur lors de la suppression d'une voiture ? En sachant que je ne peux pas mettre de clé étrangère id_voiture dans la table fichiers.


Me suis-je bien fait comprendre ?



Merci à vous !
Modérateur
Salut,

il faudrait voir comment tu as déclaré tes tables. Là, à brute pour point, je te conseille vivement de faire des recherches sur ce genre d'expression (avec les contraintes d'intégrité):
ON DELETE CASCADE / ON UPDATE CASCADE.

Tu as une petite description ici . En faisant des recherches plus avancées, tu trouveras surement mieux.

<<<EDIT
lien annexe pouvant surement t'aider : Mysql/MariaDB : Using FOREIGN KEY Constraints

EDIT;
Modifié par niuxe (25 Nov 2015 - 13:30)
Salut,
J'aurai tendance a dire que c'est ta base qui est mal foutue :s

Pour que les fichiers soient supprimer en cascades il aurait fallu qu'il y ai une clé étrangère d'acheteur dans fichier (et la on aurait pu garder le on delete cascade).

A priori la, il n'y a pas de raison particulière de supprimer les fichiers car avec la structure que tu décris, un fichier pourrait très bien appartenir à plusieurs acheteurs. Je pense qu'il va falloir que tu regarde du coté des triggers (before delete dans ton cas je pense)

Bon courage