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
Les données hiérarchiques
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
Plan de sécurité Microsoft 365
Les attaquants savent comment prendre le contrôle de votre tenant Microsoft 365, et vous, savez-vous comment le reprendre en main ?
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- IA : ne déléguez pas votre cœur de métier à une boîte noire
- Identité de l’IA : 4 priorités pour anticiper plutôt que subir la régulation
- Sauvegarder les données ne suffit plus : il faut refonder le poste de travail
- Cybermalveillance : 2025, seuil franchi pour les victimes comme pour les cybercriminels
Articles les + lus
Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
Adapter la sécurité OT aux réalités de l’industrie
Coder vite, mais coder juste : trouver l’équilibre à l’ère de l’IA
Mixité dans la Tech : en 2026, un choix de souveraineté stratégique
À la une de la chaîne Tech
- Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
- DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
- Adapter la sécurité OT aux réalités de l’industrie
- Coder vite, mais coder juste : trouver l’équilibre à l’ère de l’IA
- Mixité dans la Tech : en 2026, un choix de souveraineté stratégique
