> Tech > Les données hiérarchiques

Les données hiérarchiques

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Les données organisées de façon hiérarchique sont nombreuses comme par exemple un organigramme d'entreprise ou une règle d'assemblage de pièces. La gestion de telles arborescences avec de simple type entier est plus complexe qu'il n'y paraît et particulièrement l'extraction. SQL Server 2008 propose avec le type hierarchyid toutes les méthodes

associées pour manipuler facilement les données organisées de cette façon.

Ce nouveau type de données fait plus qu’apporter le support nécessaire pour extraire les données suivant un ordre hiérarchique. En effet, avec les données de ce type, il est possible de définir des index depthfirst qui permettent d’aboutir le plus rapidement possible au niveau feuille de la hiérarchie et des index breathfirst qui permettent de faire un parcours complet d’un même niveau de la hiérarchie avant d’accéder aux données d’un niveau inférieur.

Associées également au type hierarchyID, des méthodes permettent de connaître le noeud parent (GetAncestor) d’un élément, les noeuds enfants (GetDescendant), d’accéder directement au noeud racine (GetRoot) et bien d’autre encore pour manipuler efficacement les données hiérarchiques.

Dans l’exemple présenté ci-dessous :
create table salaries(
 id int identity (1,1),
 position hierarchyId,
 nom nvarchar(80),
 poste nvarchar(80));
go
insert into salaries (position, nom, poste)
 values (hierarchyId::GetRoot(), ‘DUPOND’,’chef’);
declare @patron hierarchyid;
select @patron=hierarchyid::GetRoot() from salaries;
declare @drh hierarchyid;
set @drh=@patron.GetDescendant(null, null);
insert into salaries (position, nom, poste)
 values (@drh,’BERLODIOT’,’DRH’);
insert into salaries (position, nom, poste)
 values (@patron.GetDescendant(@drh, null),’MICHALON’,’Comptable’);
insert into salaries (position, nom, poste)
 values (@drh.GetDescendant(null, null),’BERNAUD’,’Assistante’);
select position.ToString(),* from dbo.salaries;

Une table est définie avec une colonne définie sur le type hierarchyid. Pour l’insertion de la racine de la hiérarchie la méthode GetRoot est utilisée. Par la suite les noeuds enfants sont positionnés par rapport à la racine et leur niveau est obtenu par l’intermédiaire de GetDescendant. Il est alors possible de manipuler les données en utilisant les méthodes IsDescendant et GetAncestor. Par exemple, la requête présentée ci-dessous permet d’identifier les descendants directs du chef.
declare @chef hierarchyid;
select @chef=position from salaries where poste=’chef’;
select *
 from salaries
 where position.GetAncestor(1)=@chef;

Téléchargez cette ressource

Cybersécurité des collectivités : Enjeux, Perspectives & Solutions

Cybersécurité des collectivités : Enjeux, Perspectives & Solutions

Villes, intercommunalités, métropoles, départements et régions sont particulièrement exposés aux risques de cybersécurité. Ce livre blanc Stormshield présente les défis cyber que rencontrent les collectivités, les solutions et perspectives pour qu’elles puissent assurer leur mission d’utilité publique, en toute sécurité.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010