> Tech > Les données hiérarchiques

Les données hiérarchiques

Tech - Par iTPro - 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 gratuitement cette ressource

Endpoint Security : Etude IDC Enjeux & Perspectives

Endpoint Security : Etude IDC Enjeux & Perspectives

Quel est l'état de l'art des solutions de Endpoint Security et les perspectives associées à leur utilisation ? Comment garantir la sécurité des environnements sensibles en bloquant au plus tôt les cyber attaques sophistiquées, avant qu’elles n'impactent durablement vos environnements de travail ?

Tech - Par iTPro - Publié le 24 juin 2010