linux user group brescia

immagine del castello

Archivio della mailing list

[LugBS] [Bulk] Re: domanda teorica su database

diego info a diegomonselice.it
Gio 25 Nov 2010 13:19:37 UTC
Il giorno gio, 25/11/2010 alle 13.26 +0100, ollenotna2000 ha scritto:
> Il 25/11/2010 11:03, diego ha scritto:
> > secondo me dovresti fare una chiave composta dai 3 parametri A, B e C, e
> > il valore N
> >
> > tabella:
> >
> > +---+---+---+-------------+
> > | A | B | C |    n        |
> > +---+---+---+-------------+
> > |   |   |   |             |
> >
> > in realtà, visto che dici che non tutti i valori sono valorizzati,
> > significa che avrai dei record in meno. Alla fine avrai un record per
> > ogni valore esistente nel tuo array tridimensionale
> >
> >
> > Il giorno gio, 25/11/2010 alle 10.47 +0100, ollenotna2000 ha scritto:
> >> Sto progettando un database che vorrei costruire in ambiente LAMP.
> >> In sostanza i dati sono concettualizzabili in un array a 3 livelli:
> >> A (diciamo 2000 unità), B (20), C (10).
> >> Questo significa che i singoli dati sarebbero 2000x20x10= 400000.
> >>
> >> In termini di prestazioni cosa pensate sarebbe meglio:
> >>
> >> massima granularità con records fatti così:
> >> chiave A+B+C
> >> dato singolo n
> >> totale 400000 records.
> >>
> >> records con serie di dati:
> >> chiave A+C
> >> dati  b1,b2,b3....,b20
> >> totale 2000 records.
> >>
> >> Penso a questo perchè non è detto che tutte le singole celle siano
> >> valorizzate, quindi (penso, ma sono farlocco) la gestione via raccolta
> >> record sia più economica rispetto al controllo celle vuote di un array.
> >> In realtà le dimensioni date sono massime, un database reale potrebbe
> >> ridursi a 1000x10x10.
> >>
> >> Antonello
> >>
> >
> >
> In effetti anche io in teoria sarei propenso per la massima granularità 
> del database, cioè 1 dato significativo n per ogni record
> 
> +---------------------------+------+
> +  chiave                   + dati +
> +---------------------------+------+
> +    A   +   B   +   C      +  n   +
> +---------------------------+------+
> 
> piuttosto che
> 
> +----------------+---------------------------+
> +  chiave        +      dati                 +
> +----------------+---------------------------+
> +    A   +   B   +  Cn1, Cn2, Cn3.... Cn10   +
> +----------------+---------------------------+
> 
> il che vuol dire record-in-meno piuttosto che alcuni-dati-nulli.
> 
> La questione sono:
> - possibilità di gestire il numero di record con prestazioni accettabili 
> da Mysql (in questo caso si potrebbe arrivare sui 200000)
> 
> - possibilita di una programmazione php più semlice.
> 
> (il tutto vorrei farlo con php-mysql)
> 
> Tutti i dati sono numerici: anche le chiavi possono essere numeriche, 
> collegate a tabelle semplici con chiave+testodescrizione.
> 
> 

fossi in te, terrei i 3 parametri A, B, e C come tre campi distinti
della tabella (non so se si possa in mysql impostare + campi come chiave
composta, in caso contrario dovresti mettere un campo id in più con un
numero autoincrementante, per avere la chiave primaria.

Campi distinti perchè comunque, secondo me sveltirebbero un po' anche la
ricerca nel DB, trattando i 3 parametri come valori indipendenti,
anzichè come una stringa composta da + valori, cosa che credo
rallenterebbe il tutto.

una delle soluzioni a cui avevi pensato, che riporto qui sotto, richiede
che si analizzi tutta la stringa del campo "dati" di ogni record,
andando a spezzettarla.

+----------------+---------------------------+
+  chiave        +      dati                 +
+----------------+---------------------------+
+    A   +   B   +  Cn1, Cn2, Cn3.... Cn10   +
+----------------+---------------------------+

Il tutto è reso ancora + complicato se poi pensiamo al fatto che alcuni
Cn* possono essere nulli. Mentre, secondo la soluzione che t'ho proposto
io, se il punto a,b,c ha valore nullo, semplicemente non c'è nel DB.
Quindi l'estrapolazione dei dati dal DB sarebbe più immediata e
computazionalmente meno onerosa.

Se c'è qlche esperto che ne sa più di me, mi corregga pure, in caso io
abbia scritto qualche castroneria.


-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Diego Monselice

MSN: diegomonselice a hotmail.com
Yahoo! messenger: diegomonselice
Skype: diegomonselice
Cell. Tim: (+39) 339 25 68 172
Cell. Vodafone: (+39) 347 99 39 028
Web: http://www.diegomonselice.it
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Maggiori informazioni sulla lista Lug