35 messaggi dal 04 gennaio 2008
Buongiorno a tutti,

volevo avere un parere sulla convenienza di normalizzare una relazione dati.
La mia situazione è la seguente:

ho un'unica tabellona da 26000 righe (quindi relativamente poche).
Poniamo caso che questa tabellona contenga l'elenco di tutti i comuni d'italia (è un esempio) con i seguenti campi:

Id_Comune|Nome_Comune|N_Abitanti|Sigla|Id_Provincia|Nome_provincia|Id_Regione|Nome_Regione|Id_Nazione|Nome_Nazione

La sorgente dati arriva dall'anagrafica del cliente...al fine di sviluppare un applicazione web è stato creato un db ad hoc in cui periodicamente verranno importati i dati provenienti da questa tabellona piatta.

Vista la struttura della tabella avevo pensato di normalizzare il tutto scindendo il "tabellone" in 4 tabelle (Comune,Provincia,regione,nazione)...(so che la tabella nazione non ha senso ma ripeto è solo un esempio)
Facendo in questo modo il numero di righe delle 4 tabelle diventerebbe 26000,750,45,15 (questi sono dati reali).

Sono piuttosto sicuro che per questioni di chiarezza e di manutenibilità del db è sicuramente meglio applicare il processo di normalizzazione. Se invece si considera semplicemente l'aspetto "performance", ho letto in giro, che la denormalizzazione porta dei vantaggi non trascurabili.

La domanda è: considerata anche la dimensione delle tabelle in questione mi consigliereste di normalizzare o no (considerando che l'applicazione web non dovrà sopportare grossi carichi di lavoro)?

grazie
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
roska2184 ha scritto:
La domanda è: considerata anche la dimensione delle tabelle in questione mi consigliereste di normalizzare o no


Il disegno concettuale e logico di una base dati deve SEMPRE E COMUNQUE (leggilo in arial 900) partire da una struttura dati al più alto livello di normalizzazione.
Solo nel disegno fisico puoi decidere di denormalizzare alcune strutture per le ragioni che vuoi. Queste ragioni, però, devono essere adeguatamente motivate e devono esserne stimati costi e benefici...

Bye
35 messaggi dal 04 gennaio 2008
l.bianchi ha scritto:


Il disegno concettuale e logico di una base dati deve SEMPRE E COMUNQUE (leggilo in arial 900) partire da una struttura dati al più alto livello di normalizzazione.


Benissimo, mi hai confermato quello che il mio professore del corso di Basi di Dati all'università ha sempre predicato


Solo nel disegno fisico puoi decidere di denormalizzare alcune strutture per le ragioni che vuoi. Queste ragioni, però, devono essere adeguatamente motivate e devono esserne stimati costi e benefici...


ok...a questo punto utilizzero nei test entrambe le soluzioni. Nel caso in cui la struttura denormalizzata apporti vantaggi significativi in termini di performance la utilizzerò...in caso contrario normalizzerò tutto..

Grazie e ciao
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
roska2184 ha scritto:
ok...a questo punto utilizzero nei test entrambe le soluzioni. Nel caso in cui la struttura denormalizzata apporti vantaggi significativi in termini di performance la utilizzerò...in caso contrario normalizzerò tutto..


Nel post iniziale hai parlato di una situazione attuale con una sola tabella e di una soluzione normalizzabile in 4 tabelle (aggiungendo anche "questi sono dati reali").
Se questi sono dati reali non starei a perdere neanche 10 secondi per pensarci/fare prove e creerei una struttura al massimo livello di normalizzazione.
Inoltre ci sono una serie di soluzioni intermedie che sembra che vuoi scartare a priori ma che, pur rappresentando un compromesso rispetto alla situazione normalizzata, andrebbero valutate MOLTO PRIMA della soluzione che prevede la denormalizzazione totale

Bye
35 messaggi dal 04 gennaio 2008
l.bianchi ha scritto:

Nel post iniziale hai parlato di una situazione attuale con una sola tabella e di una soluzione normalizzabile in 4 tabelle (aggiungendo anche "questi sono dati reali").

è così...la tabella che ho in input è una sola la quale è normalizzabile in 4 tabelle


Se questi sono dati reali non starei a perdere neanche 10 secondi per pensarci/fare prove e creerei una struttura al massimo livello di normalizzazione.


Infatti è quello che pensavo io..poi però ho pensato che lasciando la situazione così com'è avrei avuto performance superiori ma probabilmente vista la modesta mole di dati "il gioco non vale la candela".Quindi allo stato attuale sono di nuovo propenso alla completa normalizzazione


Inoltre ci sono una serie di soluzioni intermedie che sembra che vuoi scartare a priori ma che, pur rappresentando un compromesso rispetto alla situazione normalizzata, andrebbero valutate MOLTO PRIMA della soluzione che prevede la denormalizzazione totale


Ad esempio? Non spaccare il tutto in 4 tabelle ma magari in 2 o 3?
1.024 messaggi dal 19 dicembre 2003
Contributi | Blog
Infatti è quello che pensavo io..poi però ho pensato che lasciando la situazione così com'è avrei avuto performance superiori ma probabilmente vista la modesta mole di dati "il gioco non vale la candela".Quindi allo stato attuale sono di nuovo propenso alla completa normalizzazione


Tieni conto che 26000 record denormalizzati occupano sicuramente (molto) più spazio rispetto ad una situazione normalizzata.
Vero che la situazione denormalizzata ti evita l'utilizzo dei join, ma è altrettanto vero che strutturando meglio la base dati avresti un utilizzo di memoria molto più basso e, di conseguenza, anche un table scan sosterrà un numero di letture logiche di molto inferiore

Ad esempio? Non spaccare il tutto in 4 tabelle ma magari in 2 o 3?


Esatto...

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.