Grazie a tutti per le risposte, che ho trovato utilissime. Vi posto un breve riassunto di quello che ho fatto, cosi', se volete, potete darmi una mano a migliorare il lavoro (credo di essere veramente vicino ad una beta da mettere in rete). Penso che uno schema di buon livello possa essere del tipo: TABLE i18n_specs_iso639 ( lang CHAR(2) PRIMARY KEY, name TEXT DEFAULT('notavailable') ); TABLE node ( id SERIAL PRIMARY KEY CHECK (id > 0), type INTEGER DEFAULT(0) ); TABLE node2node ( __current INTEGER REFERENCES node(id), __parent INTEGER REFERENCES node(id) ); TABLE products ( id INTEGER REFERENCES node (id), image BYTEA ); TABLE descriptions ( id INTEGER REFERENCES node (id), lang char(2) REFERENCES i18n_specs_iso639, name TEXT DEFAULT('not available'), description TEXT DEFAULT('not available'), contents TEXT DEFAULT('not available') ); Le tabelle prodotti e descrizioni possono essere associate in una sola tabella, visto che adesso i riferimenti vengono fatti solo attraverso node e node2node: Es. SELECT n.id, p.image, d.name, d.description FROM products AS p, node AS n, descriptions AS d, node2node as n2n WHERE n2n.__parent='1' AND n.type='1' AND n.id=n2n.__current AND p.id=n.id AND d.id=n.id AND d.lang='it'; Seleziona tutti i prodotti che dipendono dalla categoria 1 (n.type='1'). In genere, la presentazione dei proddotti avviene seguento i link delle categorie, scorrendo l'albero, fino ad arrivare al prodotto. Posso subito sapere se il link richiesto e' un prodotto o una categoria (mi basta controllare il campo node.type, grazie all'idea di Matteo). Visto che sia categorie che prodotti hanno le stesse caratteritiche di base, ma possono essere visualizzate in modo diverso, posso basare la politica di presentazone solo sul campo type (es. se e' categoria, non visualizzare la scritta "inserisci nel carrello"). Se i prodotti, o le categorie, necessitano di particolari attributi, posso inserirli in tavole separate, e accedervi solo se necessario. E magari usare l'ereditarieta' per avere una tabella di attributi base, ed una tabella prodotti/categorie estesa. Per quanto riguarda le connessioni al database, sto usando un pool di connessioni, che viene inzializzato allo startup dell'applicazione. Il numero di connessioni attive e' variabile a runtime, ed e' impostato a venti da un parametro nel web.xml, con la possibilita' di aprire dieci nuove connessioni in caso di necessita' (in background, tramite un thread che fa solo questo). Ciao, Mario -- Per iscriversi (o disiscriversi), basta spedire un messaggio con SOGGETTO "subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx