Ajout du niveau dans un arbre intervallaire

Voici comment ajouter le niveau des éléments dans un arbre modélisé par intervalles.

Pour notre test, la table est la suivante :

CREATE TABLE T_VEHICULE_VHC
(VHC_ID         INTEGER NOT NULL PRIMARY KEY,
 VHC_BG         INTEGER,
 VHC_BD         INTEGER,
 VHC_NOM        VARCHAR(16));

Les données que l’on y insère sont les suivantes :

INSERT INTO T_VEHICULE_VHC VALUES (1, 1, 26, 'ALL');
INSERT INTO T_VEHICULE_VHC VALUES (2, 2, 7, 'SEA');
INSERT INTO T_VEHICULE_VHC VALUES (3, 8, 19, 'EARTH');
INSERT INTO T_VEHICULE_VHC VALUES (4, 20, 25, 'AIR');
INSERT INTO T_VEHICULE_VHC VALUES (5, 3, 4, 'SUBMARINE');
INSERT INTO T_VEHICULE_VHC VALUES (6, 5, 6, 'BOAT');
INSERT INTO T_VEHICULE_VHC VALUES (7, 9, 10, 'CAR');
INSERT INTO T_VEHICULE_VHC VALUES (8, 11, 16, 'TWO WHEELS');
INSERT INTO T_VEHICULE_VHC VALUES (9, 17, 18, 'TRUCK');
INSERT INTO T_VEHICULE_VHC VALUES (10, 21, 22, 'ROCKET');
INSERT INTO T_VEHICULE_VHC VALUES (11, 23, 24, 'PLANE');
INSERT INTO T_VEHICULE_VHC VALUES (12, 12, 13, 'MOTORCYCLE');
INSERT INTO T_VEHICULE_VHC VALUES (13, 14, 15, 'BICYCLE');;

Que l’on peut présenter ainsi :

VHC_NOM            VHC_ID      VHC_NIVEAU  VHC_PATH
------------------ ----------- ----------- --------------------------------
ALL                1           0          
 AIR               4           1           AIR
  PLANE            11          2           AIR, PLANE
  ROCKET           10          2           AIR, ROCKET
 EARTH             3           1           EARTH
  CAR              7           2           EARTH, CAR
  TRUCK            9           2           EARTH, TRUCK
  TWO WHEELS       8           2           EARTH, TWO WHEELS
   BICYCLE         13          3           EARTH, TWO WHEELS, BICYCLE
   MOTORCYCLE      12          3           EARTH, TWO WHEELS, MOTORCYCLE
 SEA               2           1           SEA
  BOAT             6           2           SEA, BOAT
  SUBMARINE        5           2           SEA, SUBMARINE

Le calcul du niveau peut se faire par la requête :

SELECT VHC_ID,
       (SELECT COUNT(*)
        FROM   T_VEHICULE_VHC
        WHERE  VHC_BG  REF.VHC_BD) AS VHC_NIVEAU,
       VHC_NOM
FROM   T_VEHICULE_VHC AS REF;

En fait il s’agit de compter le nombre de parents d’un nœud.

Pour rajouter le calcul du niveau en dur dans la table, on peut faire comme ceci :

ALTER TABLE T_VEHICULE_VHC ADD VHC_NIVEAU SMALLINT;

Ce qui rajoute la colonne niveau dans la table.

Il faut maintenant la mettre à jour :

UPDATE REF
SET    VHC_NIVEAU = (SELECT COUNT(*)
        FROM   T_VEHICULE_VHC
        WHERE  VHC_BG  REF.VHC_BD)
FROM   T_VEHICULE_VHC AS REF;

Le site web sur le SQL et les SGBDR
MVP Microsoft SQL Server


Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES
Expert  S.G.B.D  relationnelles   et   langage  S.Q.L
Moste  Valuable  Professionnal  Microsoft  SQL Server
Société SQLspot  :  modélisation, conseil, formation,
optimisation,  audit,  tuning,  administration  SGBDR
Enseignant: CNAM PACA, ISEN Toulon, CESI Aix en Prov.

L’ntreprise SQL Spot

Une réflexion au sujet de « Ajout du niveau dans un arbre intervallaire »

Laisser un commentaire