PDA

View Full Version : [JAVA] Progettazione Applicazione Documentale DB


braian
22-05-2012, 18:01
Ciao a tutti.
Dovrei realizzare una applicazione che utilizza un DB, e che è costruita in questo modo:
1) ci sono le tabelle dei metadati (Tipo documento, Attributi Documento...)
2) a partire dalle tabelle dei metadati vengono create/modificate (anche durante la normale esecuzione dell'applicazione) le tabelle dei dati. Es: se creo un nuovo Tipo Documento inserendo un nuovo record nella tabella dei metadati "Tipo documento" (Contratti, Fatture, Appunti..) viene creata sul DB la relativa tabella dei dati, che ha come colonne gli attributi che ho definito nell'altra tabella dei metadati.

Pensavo di utilizzare un ORM per mappare le tabelle dei metadati dato che queste non cambiano la loro struttura durante il funzionameno dell'applicazione, ma mi chiedevo se era possibile mappare anche le tabelle dei dati , in modo da lavorare anche per queste con dei POJO.

Non credo però che sia possibile creare classi a runtime e modificare la loro struttura (potrei decidere di aggiungere dinamicamente un attributo alla tabella dei contratti e vorrei avere la calsse modificata).

Questa credo che sia un po' la logica utilizzata anche dai CMS o dai CRM.

Avete qualche suggerimento su come strutturare la mia applicazione, specialmente per la parte ORM/DB?

Grazie

gokan
23-05-2012, 10:22
Ciao a tutti.
Dovrei realizzare una applicazione che utilizza un DB, e che è costruita in questo modo:
1) ci sono le tabelle dei metadati (Tipo documento, Attributi Documento...)
2) a partire dalle tabelle dei metadati vengono create/modificate (anche durante la normale esecuzione dell'applicazione) le tabelle dei dati. Es: se creo un nuovo Tipo Documento inserendo un nuovo record nella tabella dei metadati "Tipo documento" (Contratti, Fatture, Appunti..) viene creata sul DB la relativa tabella dei dati, che ha come colonne gli attributi che ho definito nell'altra tabella dei metadati.

Pensavo di utilizzare un ORM per mappare le tabelle dei metadati dato che queste non cambiano la loro struttura durante il funzionameno dell'applicazione, ma mi chiedevo se era possibile mappare anche le tabelle dei dati , in modo da lavorare anche per queste con dei POJO.

Non credo però che sia possibile creare classi a runtime e modificare la loro struttura (potrei decidere di aggiungere dinamicamente un attributo alla tabella dei contratti e vorrei avere la calsse modificata).

Questa credo che sia un po' la logica utilizzata anche dai CMS o dai CRM.

Avete qualche suggerimento su come strutturare la mia applicazione, specialmente per la parte ORM/DB?

Grazie
Ciao, la natura così mutevole delle tabelle dati mi fa pensare che forse utilizzare un database relazionale non è la migliore delle idee.
Difatti così come potresti aggiungere una colonna, potresti anche avere la necessità di eliminare e fare queste operazioni alla lunga potrebbe anche essere un carico o addirittura non essere possibile (ad esempio su IBM DB2 fino a qualche tempo fa non si poteva nemmeno fare il drop column).

Potresti forse, nell'ipotesi di essere "costretto" ad utilizzare un db relazionale, pensare di usare delle colonne di tipo XML (sia DB2 che Oracle hanno un tipo dato simile). In questo modo potresti buttare tutto dentro una colonna xml e poi fare delle query sui dati usando xpath (http://www.ibm.com/developerworks/data/library/techarticle/dm-0603saracco2/).

Un ORM come Hibernate oltre a fare il mapping classe->tabella, consente anche di fare il contrario tabella->classe (utile soprattutto nei sistemi legacy), ma nel tuo caso lo sconsiglierei fortemente (in riferimento al fatto che potresti modificare una tabella e trovare il nuovo attributo sulla classe, ma non sono sicuro che si possa fare a runtime).

Ciao