[Linuxtrent] Re: Suggerimento per logica applicazione web (postlungo)

  • From: Mario Torre <neugens@xxxxxxxxx>
  • To: LinuxTrent <linuxtrent@xxxxxxxxxxxxx>
  • Date: 18 Oct 2002 19:44:41 +0200

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


Other related posts: