2009-11-11 19 views
1

En supposant que vous avez la table de base de données suivante:Interrogation relations parents-enfants Efficacement

create table Names (
    Id INT IDENTITY NOT NULL, 
    Name NVARCHAR(100) not null, 
    ParentNameId INT null, 
    primary key (Id) 
) 

create index IX_Name on Names (Name) 

alter table Names 
    add constraint FK_NameNames 
    foreign key (ParentNameId) 
    references Names 

Cela permet la définition des noms hiérarchiques. Chaque nom peut avoir un nom de parent et n'importe quel nombre de noms de fils.

Je souhaite trouver l'enregistrement correspondant à un nom qualifié tel que "a: b: c", où les deux-points délimitent chaque nom. Je l'ai fait actuellement avec des jointures:

select 
    Id 
from 
    Names names0 
    inner join Names names1 on names0.ParentNameId = names1.Id 
    inner join Names names2 on names1.ParentNameId = names2.Id 
where 
    names0.Name = 'a' and 
    names1.Name = 'b' and 
    names2.Name = 'c' and 
    names0.ParentNameId is null 

Ce que je me demande est de savoir s'il y a un moyen plus efficace de faire ce qui ne concerne pas la dénormalisation des données ou de prendre une dépendance difficile sur un SGBD particulier.

Merci

Répondre

1
+0

travail de Celko sur les arbres et les hiérarchies dans la lecture SQL doit être nécessaire pour toute personne dans le domaine SGBDR. –

+0

Merci. C'est tout simplement génial. J'espère que NHibernate pourra travailler avec cette approche. – giggidy