Consiglio per progettazione db

di il
27 risposte

Consiglio per progettazione db

Ciao a tutti, vi chiedo un consiglio tecnico per la realizzazione di un db mySQL su un server dedicato.
Vi spiego direttamente il problema:

Ho la necessità di gestire 500 modelli, ogni modello a sua volta avrà dei valori variabili, esempio (MOLTO semplificato):

Modello 1 - colonna1,colonna2, colonna3, colonna4
Modello 2 - colonna1, colonna2, colonna7, colonna56, colonna78.

e cosi via per un totale di 500 modelli circa, ognuno con le sue colonne, adesso il mio dubbio è: avendo necessità di fare delle statistiche sui valori dei modelli (tipo: quante persone col modello 1 hanno i valori della colonna3 superiori a tot), come posso strutturare un db simile?

Opzione1: creo 500 tabelle diverse per ogni modello. (non mi fa impazzire come idea, ma è una soluzione "pulita" per cosi dire)
Opzione2: creo 1 tabella "Modelli" e inserisco per ogni riga un modello, quindi avrò 500 righe è fin qui è tutto ok, però poi come posso gestire le varie colonne? considerando che 1 modello puo avere anche una 30ina di colonne, quindi non posso mettere tutte le colonne di ogni modello in una singola tabella, diventerebbe un accozzaglia di dati oltre al fatto chè sarei pieno di valori "null" visto che sempre prendendo come esempio sopra, la colonna7, colonna56, colonna78, li ha solo il modello2, e non il modello1. (questa idea mi fa impazzire ancora meno, la trovo improponibile e poco funzionale)

Idee?

27 Risposte

  • Re: Consiglio per progettazione db

    Sostituisci mysql con mariadb e vai di colonne dinamiche
  • Re: Consiglio per progettazione db

    Rosa84 ha scritto:


    Ho la necessità di gestire 500 modelli, ogni modello a sua volta avrà dei valori variabili, esempio (MOLTO semplificato):
    Modello 1 - colonna1,colonna2, colonna3, colonna4
    Modello 2 - colonna1, colonna2, colonna7, colonna56, colonna78.
    Devi avere sicuramente una tabella Modelli.
    Questa descrizione di tabelle che fornisci non ci dice nulla, abbiamo bisogno di una descrizione più aderente alla realtà. Prova a fare 2-3 esempi significativi.
  • Re: Consiglio per progettazione db

    Alternativa dinamica:

    - 1 tabella Modelli: IDModello, Modello, <altri campi>
    relazionata con:
    - 1 tabella CampiModelli: IDCampo, IDModello (FK), Valore, <altri campi>

    In questo modo ogni Modello potrà avere <n> campi, senza alcun limite.
  • Re: Consiglio per progettazione db

    OsvaldoLaviosa ha scritto:


    Rosa84 ha scritto:


    Ho la necessità di gestire 500 modelli, ogni modello a sua volta avrà dei valori variabili, esempio (MOLTO semplificato):
    Modello 1 - colonna1,colonna2, colonna3, colonna4
    Modello 2 - colonna1, colonna2, colonna7, colonna56, colonna78.
    Devi avere sicuramente una tabella Modelli.
    Questa descrizione di tabelle che fornisci non ci dice nulla, abbiamo bisogno di una descrizione più aderente alla realtà. Prova a fare 2-3 esempi significativi.
    Allora, devo gestire 500 modelli di esami differenti, esempio:

    Esami urine: aspetto, colore, densità, ph, proteine, ecc
    esami ematologici: eritocriti, emoglobina, mcv, mch, mchc ecc

    e cosi via per un totale di 500 esami diversi circa, dove ogni esame ha dai 10 ai 30 valori.
  • Re: Consiglio per progettazione db

    gibra ha scritto:


    Alternativa dinamica:

    - 1 tabella Modelli: IDModello, Modello, <altri campi>
    relazionata con:
    - 1 tabella CampiModelli: IDCampo, IDModello (FK), Valore, <altri campi>

    In questo modo ogni Modello potrà avere <n> campi, senza alcun limite.
    Il problema di questa soluzione è che avendo tantissimi campi (calcolo minimo considerando una media di 15 valori ad esame, viene 7500 campi), non posso fare una tabella con 7500 colonne
  • Re: Consiglio per progettazione db

    +m2+ ha scritto:


    Sostituisci mysql con mariadb e vai di colonne dinamiche
    Preferirei rimanere in un ambiente conosciuto, ma potrebbe essere un'alternativa valida, mi leggo un po la documentazione e il funzionamento di queste colonne dinamiche.
  • Re: Consiglio per progettazione db

    Rosa84 ha scritto:


    Il problema di questa soluzione è che avendo tantissimi campi (calcolo minimo considerando una media di 15 valori ad esame, viene 7500 campi), non posso fare una tabella con 7500 colonne
    Infatti NON DEVI farlo (anche si potesse fare sarebbe comunque sbagliato)
    Evidentemente hai frainteso.
    I valori sono in verticale, non in orizzontale.
  • Re: Consiglio per progettazione db

    gibra ha scritto:


    Rosa84 ha scritto:


    Il problema di questa soluzione è che avendo tantissimi campi (calcolo minimo considerando una media di 15 valori ad esame, viene 7500 campi), non posso fare una tabella con 7500 colonne
    Infatti NON DEVI farlo (anche si potesse fare sarebbe comunque sbagliato)
    Evidentemente hai frainteso.
    I valori sono in verticale, non in orizzontale.
    Si ho inteso male.
    Avrebbe senso, strutturalmente parlando, però poi dove salvo i record?
  • Re: Consiglio per progettazione db

    Rosa84 ha scritto:


    gibra ha scritto:


    Avrebbe senso, strutturalmente parlando, però poi dove salvo i record?
    Li salvi nelle tabelle che ti ho indicato.
  • Re: Consiglio per progettazione db

    Rosa84 ha scritto:


    Allora, devo gestire 500 modelli di esami differenti, esempio:

    Esami urine: aspetto, colore, densità, ph, proteine, ecc
    esami ematologici: eritocriti, emoglobina, mcv, mch, mchc ecc

    e cosi via per un totale di 500 esami diversi circa, dove ogni esame ha dai 10 ai 30 valori.
    Io ci vedrei una tabella Nomenclature con i seguenti campi:
    IDNomenclatura (PK)
    Nomenclatura (aspetto, colore, densità, eritorcriti, emoglobina…)
    TipoEsame (urine, ematologici…)

    In questa tabella associ tutte le corrette Nomenclature al relativo TipoEsame. A seconda del TipoEsame che stai trattando potresti predisporre una "query di accodamento" (non so se in MySQL si dice così...io uso Access…) che richiama il TipoEsame. Poi prevedi anche una colonna Valore.
    Un inconveniente può essere che la colonna Valore può essere ora testo, ora numerico intero, ora numerico decimale, percentuale...qua mi perdo un po' anch'io...
  • Re: Consiglio per progettazione db

    Rosa84 ha scritto:


    Avrebbe senso, strutturalmente parlando, però poi dove salvo i record?
    Considerando la tua esigenza (che mi era sfuggita)

    Rosa84 ha scritto:


    Allora, devo gestire 500 modelli di esami differenti, esempio:

    Esami urine: aspetto, colore, densità, ph, proteine, ecc
    esami ematologici: eritocriti, emoglobina, mcv, mch, mchc ecc
    e cosi via per un totale di 500 esami diversi circa, dove ogni esame ha dai 10 ai 30 valori.
    Direi che lo schema che ti ho suggerito è perfetto sotto ogni aspetto (e di esami ultimamente ne sto facendo parecchi! ):
    - 1 tabella Modelli: IDModello, Modello, <altri campi>
    relazionata con:
    - 1 tabella CampiModelli: IDCampo, IDModello (FK), Valore, <altri campi>
    La tabella Modelli conterrà:
    Urine, Emocromo, ecc
    La tabella CampiModelli conterrà:
    I campi di ogni esame, esempio:

    Modelli:
    IDModello  Modello 
    1          Urine
    2          Emocromo
    ecc.
    CampiModello
    
    IDCampoModello  IDModello  Campo   Valore
    1               1          Aspetto Limpido
    2               1          Colore  Chiaro 
    ecc. 
    Un domani devi aggiungere un nuovo modello, oppure un nuovo campo basta aggiungerli ai rispettivi modelli.
  • Re: Consiglio per progettazione db

    gibra ha scritto:


    Rosa84 ha scritto:


    Avrebbe senso, strutturalmente parlando, però poi dove salvo i record?
    Considerando la tua esigenza (che mi era sfuggita)

    Rosa84 ha scritto:


    Allora, devo gestire 500 modelli di esami differenti, esempio:

    Esami urine: aspetto, colore, densità, ph, proteine, ecc
    esami ematologici: eritocriti, emoglobina, mcv, mch, mchc ecc
    e cosi via per un totale di 500 esami diversi circa, dove ogni esame ha dai 10 ai 30 valori.
    Direi che lo schema che ti ho suggerito è perfetto sotto ogni aspetto (e di esami ultimamente ne sto facendo parecchi! ):
    - 1 tabella Modelli: IDModello, Modello, <altri campi>
    relazionata con:
    - 1 tabella CampiModelli: IDCampo, IDModello (FK), Valore, <altri campi>
    La tabella Modelli conterrà:
    Urine, Emocromo, ecc
    La tabella CampiModelli conterrà:
    I campi di ogni esame, esempio:

    Modelli:
    IDModello  Modello 
    1          Urine
    2          Emocromo
    ecc.
    CampiModello
    
    IDCampoModello  IDModello  Campo   Valore
    1               1          Aspetto Limpido
    2               1          Colore  Chiaro 
    ecc. 
    Un domani devi aggiungere un nuovo modello, oppure un nuovo campo basta aggiungerli ai rispettivi modelli.
    è tutto perfetto ma credo a questo punto di aver spiegato male la mia esigenza, perdonami, (o non sto capendo io il modus operandi) con "Record" intendo i valori degli esami dei pazienti, scenario: arriva paziente, il medico apre il gestionale che controlla la presenza di un file xml contenente il tipo di esame che ha eseguito estrapolato dalle macchine del laboratorio e ovviamente i valori dell'esame, questi valori devono essere registrati su un database per poi farci delle statistiche (quanti pazienti che hanno fatto l'esame delle urine a ottobre hanno il ph sopra tot per esempio). e ovviamente avere uno storico di tutti gli esami fatti in precedenza.
    Non so dove salvare questi dati, questo è il mio problema.
  • Re: Consiglio per progettazione db

    Dai un'occhiata se questa esigenza e' simile alla tua

  • Re: Consiglio per progettazione db

    Rosa84 ha scritto:


    scenario: arriva paziente, il medico apre il gestionale che controlla la presenza di un file xml contenente il tipo di esame che ha eseguito estrapolato dalle macchine del laboratorio e ovviamente i valori dell'esame, questi valori devono essere registrati su un database per poi farci delle statistiche (quanti pazienti che hanno fatto l'esame delle urine a ottobre hanno il ph sopra tot per esempio). e ovviamente avere uno storico di tutti gli esami fatti in precedenza.Non so dove salvare questi dati, questo è il mio problema.
    Io la vedo così:

    Pazienti
    IDPaziente (PK)
    Cognome
    Nome
    Indirizzo
    ...altri campi tipicamente anagrafici

    Esami
    IDEsame (PK)
    DataEsame
    IDPaziente (FK)
    IDTipoEsame (FK)

    DettagliEsami
    IDDA (PK)
    Nomenclatura
    Valore
    IDEsame (FK)

    TipiEsami
    IDTipoEsame (PK)
    TipoEsame

    Nomenclature
    IDNomenclatura (PK)
    Nomenclatura
    IDTipoEsame (FK)

    Relazioni:
    Pazienti.IDPaziente uno-a-molti Esami.IDPaziente
    TipiEsami.IDTipoEsame uno-a-molti Esami.IDTipoEsame
    Esami.IDEsame uno-a-molti DettagliEsami.IDEsame
    TipiEsami.IDTipoEsame uno-a-molti Nomenclature.IDTipoEsame

    Scusate se uso termini più alla Access...spero ci siano corrispondenze medesime anche in MySQL.
    Normalmente si lavora con maschera/sottomaschera Esami/DettagliEsami. Dopo aver compilato i campi di Esami, una query di accodamento deve andare a prelevare tutte le Nomenclature corrispondenti al IDTipoEsame visibile nella maschera Esami, quindi accodarle in DettagliAnalisi. Dopo di che l'utente compila i corrispondenti Valori.
Devi accedere o registrarti per scrivere nel forum
27 risposte