Domanda

Supponendo di avere la seguente tabella del database:

 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

In questo modo la definizione di nomi gerarchici. Ogni nome può avere un nome genitore, e qualsiasi numero di nomi del bambino.

Vorrei trovare il record che corrisponde a un nome qualificato come "a: b: c", in cui due punti delimitano ogni nome. Ho fatto così attualmente utilizzando join:

 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

Quello che mi chiedo è se c'è un modo più efficiente per fare questo che non comporta denormalizzazione dei dati o di prendere una dipendenza difficile in un particolare DBMS.

Grazie

È stato utile?

Soluzione

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top