Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MYSQL] tabella con campi dinamici

    Salve a tutti
    sono alle prime esperienze con dei progetti relativamente grossi con php e mysql.

    ho bisogno di creare una web app che mi gestisca dei clienti dove ogni cliente ha un anagrafica con vari campi (es nome, telefono, email)
    ma ho bisogno che all'occorrenza sia possibile aggungere dei campi

    so che con una query si può andare a modificare la struttura della tabella ma mi chiedevo se fosse il modo corretto di procedere

    sapete suggerirmi un metodo migliore?

    Grazie!

    edit l'alternativa è fare una tabella cosi

    nome_voce | id_cliente | valore_del_campo

    email | 12 | prova@prova.it


    però così viene fuori un puttanaio

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    non c'è una risposta semplice.

    ci sono vari approcci

    1) creare una tabella payload separata, con una chiave che viene collegata al record principale. la tabella payload è diversa per ogni variante del programma

    2) predisponi una tabella "generica" nei quali campi inserisci anche... il nome del campo stesso

    3) adotti una strategia per la gestione di campi aggiuntivi, tipo metterci un prefisso (jitcampospecialedelcliente1, jitcampospecialedelcliente2) e così via

  3. #3
    1) creare una tabella payload separata, con una chiave che viene collegata al record principale. la tabella payload è diversa per ogni variante del programma
    questo non l'ho capito
    2) predisponi una tabella "generica" nei quali campi inserisci anche... il nome del campo stesso

    quindi una tabella clienti (id_cliente,nome_cliente)
    una tabella campi(id_campo,nome_campo,valore_campo)

    3) adotti una strategia per la gestione di campi aggiuntivi, tipo metterci un prefisso (jitcampospecialedelcliente1, jitcampospecialedelcliente2) e così via [/QUOTE]

    una tabella unica
    clienti (id_cliente, nome_cliente, campi_aggiuntivi)
    ed i campi aggiuntivi tipo separati da qualcosa (emailrova@ciccio.it,partita_iva:555555)

    ho capito bene?

    mi sa che la cosa più semplice/pulita è quella di alterare la tabella...tanto lo farà soltanto l'amministratore...metterò un paio di avvisi...


    Ti ringrazio!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Non mi è chiarissimo quali siano le parti chiare, e quali no.
    Considera che non c'è una risposta "giusta", ci sono tanti approcci validi o meno a seconda delle circostanze

    1) creare una tabella payload separata, con una chiave che viene collegata al record principale. la tabella payload è diversa per ogni variante del programma
    Esempio: tabella clienti nel db1, ci metti dentro un campo IDLINK.
    Crei una tabella payload (nel db1) che ha il campo IDLINK come chiave, e tanti bei campi specifici (che ne so codice IBAN)

    Nella tabella payload (del db2) ci metti campi diversi (peso, altezza)

    Non alteri quindi la tabella "madre" clienti (il che può portare 10000 problemi, a partire da backup e restore), bensì una tabella specifica, separata, joinata 1-1

    Lato applicazione il programma "sa" che la "roba" dentro la tabella payload va ricostruita dinamicamente.

    Ad esempio se vuoi farne vedere il contenuto al cliente, prima enumeri i campi che la compongono (dinamicamente), poi formatti i risultati, poi li mostri.

    Questo allevia il carico di lavoro di programmazione nel dover rendere dinamiche le tabelle "standard".

    Traduzione: mentre in una tabella "standard" puoi fare qualcosa tipo
    select cognome from clienti..., perchè SAI che il campo cognome esisterà, in una tabella dinamica (payload) no, non puoi farla.

    Puoi farla dopo che hai verificato se il campo X c'è

    2) predisponi una tabella "generica" nei quali campi inserisci anche... il nome del campo stesso

    quindi una tabella clienti (id_cliente,nome_cliente)
    una tabella campi(id_campo,nome_campo,valore_campo)
    qualcosa del genere
    3) adotti una strategia per la gestione di campi aggiuntivi, tipo metterci un prefisso (jitcampospecialedelcliente1, jitcampospecialedelcliente2) e così via
    Questa è la variante di modificare la tabella clienti.
    Dentro avrai (parte statica)... poi (campi aggiunti).
    Per distinguere i campi aggiunti uso un prefisso, sicchè (lato programma) posso capire quali sono i campi standard, e quali quelli specifici del cliente.

    Come detto, in generale, non ti suggerisco questa soluzione (avere tabelle basi diverse)

    una tabella unica
    clienti (id_cliente, nome_cliente, campi_aggiuntivi)
    ed i campi aggiuntivi tipo separati da qualcosa (emailrova@ciccio.it,partita_iva:555555)
    Questi sono normalmente i "tag", io uso proprio
    email=prova@ciccio.it;partita_iva=55555;
    Qui però perdi la possibilità di fare ricerche rapide, diventano lentissime a causa di fullscan necessarie per le ricerche.
    Dipende se la cosa ti interessa, oppure no.

    mi sa che la cosa più semplice/pulita è quella di alterare la tabella...tanto lo farà soltanto l'amministratore...metterò un paio di avvisi...
    Personalmente te lo sconsiglio. Diventa facilmente un vero e proprio incubo quando devi fare i restore (che diventano specifici per il cliente), nonchè per le applicazioni etc.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.