Bonjour,
J'ai lu l'excellent article concernant la représentation d'arbres par arborescence intervallaire de SQLPro et quelques questions me viennent en tête.
Premièrement, lors de l'insertion et de l'utilisation d'une contrainte excluant toute borne identique, comme décrit dans l'article par :
faut-il que ces contraintes ne soient vérifiées que lorsque la transaction commit ?
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 CONSTRAINT UNI_BORNE CHECK BORNE_DROITE (VALUE NOT IN (SELECT BORNE_DROITE AS BORNE FROM MaTable UNION ALL SELECT BORNE_GAUCHE AS BORNE FROM MaTable)) et : CONSTRAINT UNI_BORNE CHECK BORNE_GAUCHE (VALUE NOT IN (SELECT BORNE_DROITE AS BORNE FROM MaTable UNION ALL SELECT BORNE_GAUCHE AS BORNE FROM MaTable))
Si par exemple on se trouve avec le schéma suivant :
Et que le premier update de l'insertion est exécuté, nous obtenons l'arborescence suivante :
La contrainte n'est-elle pas violée; nous avons deux bornes égales à 8.
La deuxième question est d'ordre plus général et concerne la concurrence lors de l'utilisation de cette solution. En effet, lors de l'insertion ou lors de la suppression, l'intégralité de l'arbre droit par rapport à l'élément de référence est mis à jour. Dans la procédure stockée en exemple, l'isolation SERIALIZABLE est utilisée. A quel impact sur les performances peut-on s'attendre, existe-t-il des études à ce sujet ?
Merci d'avance aux personnes participant à cette discussion.
Partager