Salve a tutti,
ho generato una serie di tabelle concatenate per sfruttare la funzione di crosstab di postgresql. Per chi ne fosse all'oscuro la crosstab è una funzione aggiuntiva di Pg che permette di generare delle tabelle di pivot(http://www.postgresql.org/docs/9.1/s...tablefunc.html).
Ho già fatto una cosa simile in precedenza percui conosco il procedimento. Ora invece vorrei chiedervi un parere sulla logica.
Nel mio DB la necessità di avere tabelle dinamiche affiancate a tabelle statiche è di primaria importanza innanzitutto perchè la creazione statica necessiterebbe di tabelle con un grande numero di colonne e poi perchè queste potrebbero essere spesso vuote. In questo modo, invece, archivierei la struttura di una tabella in una "tabella struttura" e in un altra tabella gestirei i valori dei campi per ogni tabella dinamica salvando solo i campi che sono stati riempiti.
La gestione non è così semplice ma so in cosa m'imbarco, il problema è nella progettazione.
Ora veniamo al dubbio.
Ho generato le seguenti tabelle:
- dynamic_tables (id, nome, label, status);
- fields_type (id, name, label, type, lenght, status);
- fields (id, name, label, fields_type_id, status);
- fields_options(id, fields_id, value, label, status) - gestisce i valori dei fields nel caso in cui si tratti di select o radiobutton o checkbox;
- Dynamic_tables_structure(id, Dynamic_tables_id, fields_id, default, order, status);
Mi pare siano tutte le tabelle che ho generato per la struttura.
Il dubbio ora è su come gestire i risultati.
Ho 2 opzioni a mio parere:
- Creo una tabella fisica per ogni tabella virtuale(posso mettere un trigger che scatta a ogni creazione della tabella virtuale) in modo da avere in questa tabella solo i valori di una tabella;
- Creo una tabella fisica con TUTTI i valori delle tabelle dinamiche. I valori saranno veramente tanti perchè prevedo almeno una 30ina di tabelle virtuali e generare una query di crosstab anche ottimizzata potrebbe avere delle ripercussioni sulle prestazioni non indifferenti. La tabella, fisica o virtuale che sia, prevedo di strutturarla così:
- id
- dynamic_tables_structure_id
- value
- status
- datetime
Avete suggerimenti sulla struttura? Anche nell'ottimizzazione del tablespace(magari diverso dal default). Penso di far fare tutto al DB e il meno possibile a php/Zend 1.11 . Il db e il sito si trovano sullo stesso server.
Grazie per l'aiuto

Rispondi quotando