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
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. –
Merci. C'est tout simplement génial. J'espère que NHibernate pourra travailler avec cette approche. – giggidy