Bonjour,
Je possède ce genre de situation, schématiquement :
Il y a une contrainte de clé secondaire reliant Ligne.id_point_depart et Ligne.id_point_arrivé à Point.id via des REFERENCES lors de la création des tables.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Table Point ( id, name, description ) Table Ligne ( id, id_point_depart, id_point_arrivé, name, description, distance )
Des index sont placées sur Ligne.id_point_depart et Ligne.id_point_arrivé.
Tout se passe bien jusqu'à la suppression d'un point, où je procède de cette manière :
En cause selon moi, la contrainte d'intégrité qui doit faire une espèce de "NOT IN" ou "NOT EXISTS" sur la table Ligne avant d'accorder ou non le retrait du point en question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DELETE FROM Ligne WHERE id_point_depart = 2000 OR id_point_arrivé = 2000; -- très rapide à s'exécuter DELETE FROM Point WHERE id = 2000; -- très très long à s'exécuter
Du coup c'est normal que ça prenne du temps et je cherche un moyen de dire "sur ce coup là je gère, tu s'occupes de rien je s'occupe de tout" histoire de gagner du temps.
Ma première idée est de désactiver cette contrainte avant traitement et de la réactiver après traitement. Mais deux questions se posent :
1) Est-il possible de désactiver / activer ou faut-il faire un DROP / CREATE ?
2) A la réactivation / création, logiquement la contrainte va faire toutes les vérifications nécessaires sur l'intégrité avant de valider sa création n'est-ce pas ? Et au final ça fera pire que mieux en termes de temps.
Avec du recul, je me dis que tôt ou tard ces contrôles de cohérences devront s'effectuer, justement pour la garantir, et donc une consommation de temps nécessaire en conséquence.
Y a-t-il une procédure sémantique standard à employer dans ce genre de situation ou dois-je me dire que les choses prennent du temps, c'est comme ça on y peut rien ?
J'ai préféré vous consulter avant de m'engager dans ces modifications, donc je n'ai pas encore testé l'idée
Merci beaucoup,
A bientôt
Partager