delete sur une arborescence [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 25-04-2006 à 18:23:43
innodb
Marsh Posté le 26-04-2006 à 14:00:00
si vous voyez pas comment faire autrement que dans l'application, dites le moi, jme sentirai moins con
Marsh Posté le 26-04-2006 à 14:24:49
Djebel1 a écrit : si vous voyez pas comment faire autrement que dans l'application, dites le moi, jme sentirai moins con |
Bon ben je le dis alors
C'est jamais simple à gérer, ces arborescences
Marsh Posté le 26-04-2006 à 14:35:57
Une solution, sans être sur qu'elle soit possible, tu crée une nouvelle table avec la même structure que Hierarchie. Cette table est vide.
Tu fais ton delete normal sur cette table, comme si il s'agissait de la table hierarchie, et la tu declenche ton trigger before qui vire les parents dans ta "vrai" table hierarchie et la ligne que tu veux supprimer.
Sinon tu passes par l'application !
Marsh Posté le 26-04-2006 à 14:42:03
oula paye ta bidouille
J'en viens à envisager la solution suivante :
faire une table à part, contenant simplement l'ID d'un élément et l'ID de son père.
Sur la table principale, le delete d'un élément provoque la destruction de l'enregistrement correspondant dans la table à part. Ce delete provoque lui-même le delete de l'élément enfant dans la table principale.
Et ainsi de suite.
Ca parait pas mal ça non ?
Marsh Posté le 26-04-2006 à 15:05:00
bon en fait cette solution est miteuse, ça impliquerait de lever la contrainte de FK à chaque insertion dans la base, donc je trouve ça encore plus pourri que de devoir gérer le delete coté appli
Marsh Posté le 26-04-2006 à 15:36:44
ouep, pas le choix j'ai l'impression, j'aurais préféré que ça soit la base qui gère ça, tant pis.
On attendra que MySQL sorte des proc stockées récursives
Marsh Posté le 24-04-2006 à 14:36:24
Hello,
j'ai une table avec une structure arborescente : chaque élément connait l'id de son parent. La "racine" de l'arbre a un id de parent qui vaut 0.
Lorsque je détruis un élement de cet arborescence, je veux détruire tous ses "descendants". Je pensais faire un trigger, qui, quand je détruis un élément, va détruire en cascade tous les éléments enfants. J'ai fait ça :
Bien sur ça marche pas, je ne peux pas faire référence au nom de la table dans l'instruction du trigger :
Je pensais mettre une FK sur le parent. On ne peut pas placer une FK dépendant de sa propre table.
Je pensais faire une procédure stockée récursive, MySQL ne les gère pas :x
Comment faire ? Vais-je être obligé de faire ça côté application ? Quelqu'un a une autre solution ?
Message édité par Djebel1 le 24-04-2006 à 17:32:03