Re: [Postgresql-it] Match di elementi in un albero... (lunghino)

  • From: Enrico <scotty@xxxxxxxxxxxx>
  • To: postgresql-it@xxxxxxxxxxxxxxxxx
  • Date: Thu, 17 Feb 2005 17:07:21 +0100

claudio benghi wrote:

Ciao a tutti, è la prima volta che scrivo alla lista (anche se lurko da un po').

sono un architetto e sto organizzando una base dati per archiviare
delle informazioni su diverse tecnologie architettoniche... passo alla
domanda che è in realtà generica e applicabile in moltissime soluzioni
applicative.

Ho una gerarchia di classificazione (credo si dica b-tree, ma ditemi
se sbaglio)
No i B-Tree, B+Tree sono un altra cosa...

dove ad ogni ramo dell'albero sono attaccati dei child che
possono a loro volta averne altri...

Es:
1.Casa
1.1 piano primo
1.1.1 stanza 1
1.1.2 stanza 2
...
1.2 piano secondo
...
ecc. ecc.

questa gerarchia è organizzata in infiniti sottolivelli in una tabella
a tre campi (semplificando)
- id_gerarchia
- nome_gerarchia
- puntatore_padre

qurindi l'esempio di prima (comma delimited) sarebbe (mettiamo):

1,Casa,Null
2,Piano Primo,1
3,Piano Secondo, 1
4,Stanza1, 2
5,Stanza2, 2

ad ogni elemento possono corrispondere n proprietà (in altra tabella)

ad esempio: id_prop
puntatore_gerarchia
proprietà

la casa è rossa: 1,1,rossa
lla stanza 2 è gialla: 2,5,gialla

ora... se io cerco "rossa" nelle prop.... vorrei trovare tutti i figli
della casa...
mi pareva che questa cosa si potesser fare con una join tra le
proprietà ed una tabelle che rappresentasse l'albero "sviluppato"...
ad esempio:


1,1: (la casa ha le proprietà della casa) (scontato)
2,1: (Il primo piano ha le proprità della casa)
3,1: (anche il secondo...)
--- fino a qui è facile... lo ottengo con una semplice join...
ma io vorrei anche sapere che poi 4,1: la stanza uno (dato cha appartiene al primo piano... ha le prop della casa)
5,1: stesso vale per la stanza due...

questo non lo so fare... ci vorrebbe una join ricorsiva... c'e' modo
di ottenerla?

Scusate se sono stato lungo e confuso... non ho ancora toccato il
letto ore 6.51...
maledetti hobby ;-)

Per quello che ho visto qui secondo me, se vuoi fare le cose per bene, dovresti vedere un attimo il modello ER del DB. Vai in rete e cerca sotto modello ER Entity - Relationship te lo studi un po e poi ti fai il schema ER del tuo problema. Fatto ciò passi al modello relazionale, cioè tiri giu le tabelle che dovranno realizzare il tuo database. Una volta fatto cio definisci tutti i vncoli trigger, indici ( e qui ci sono i B+ Tree....) di cui il tuo db ha bisogno.
Purtroppo quando il problema è complesso senza l'applicazione di un po di teoria sui database si rischia di creare dati ridondanti e database poco efficienti.

Ciao Enrico

Other related posts: