[MySQL] Normalizzare un database con migliaia di dati già inseriti

  • Creatore Discussione Creatore Discussione elpirata
  • Data di inizio Data di inizio

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Un saluto a tutti i frequentatori del forum,
vi pongo un quesito e confido vivamente in un vostro supporto perchè sono realmente disperato.

Circa 4 anni fa realizzai un piccolo gestionale scritto con php e mysql, avendo pochissima esperienza strutturai il database con poche tabelle e non mi preoccupai di realizzare, come invece avrei dovuto fare, più tabelle relazionate tra di loro. Ora a distanza di 4 anni, il gestionale continua ad essere utilizzato, le esigenze sono cambiare e dovrei apportare delle modifiche. In tutta sostanza il database contiene adesso 4270 record e gran parte di essi sono duplicati perchè il database e le relative tabelle non sono normalizzate. Io non ho la più pallida idea di come eseguire la normalizzazione e pertanto chiedo supporto a voi per capire come normalizzare tutte le tabelle senza perdere i dati.

Vi allego un dump della struttura senza dati

Confido nel vostro supporto sono per davvero impantanato.

Grazie
 

Allegati

Ho dato uno sguardo al dump, sinceramente opterei per una ristrutturazione del DB ed un successivo upgrade dell'appicazione, magari adesso (dopo 4 anni) hai più o meno idea di cosa dovrebbe fare l'applicazione e soprattutto sul come deve farlo...
Potresti utilizzare per le TBL "commesse" e "preventivi" una sola tabella tipizzata, e spezzare i vari campi in successive tabelle tipo:
1 preventivo -> molti item
1 commessa -> molti item
Detto ciò, e senza andare oltre la tua richiesta...
Per "Normalizzare" cosa intendi? Eliminare i Duplicati?
Se si tratta solo di eliminare i duplicati potresti creare degli eventi sul DB o scrivere un file da richiamare tramite cron job che legge tutte le righe e che solo successivamente cancella le righe duplicate...
Sinceramente non opterei per una cancellazione diretta dei record, ma sarebbe meglio inserire un campo "stato" tipo booleano BOOL che si traduce in TYNINT con stati (0 non visibile, 1 visibile) così da impattare al minimo sul normale utilizzo dell'app.
 
Ciao Macus_adi e grazie davvero di cuore per la risposta e il relativo interessamento. Hai perfettamente centrato il fulcro della questione e di fatti il mio grande problema è proprio relativo alle tbl commesse e poi non tanto alla tbl preventivi quanto alla tbl appuntamenti, perchè, prendendo ad esempio la tbl preventivi nella tbl trovo per lo stesso numero di targa tanti interventi diversi, pertanto la pochissima esperienza che ho maturato mi suggerisce di "spezzare" la tbl commesse e affiancare ad essa una tbl clienti e poi realizzare una relazione tra la targa e il cliente, cosi facendo l'anagrafica cliente la carico solo una volta e per ogni cliente posso avere più interventi.

Ora, non so come normalizzare il tutto senza perdere tutti gli interventi già caricati.
E non so assolutamente cosa significhi creare eventi sul db...

Avrei bisogno di una mano per normalizzare almeno i primi, poi proseguo da solo, sono 4270 record e se li perdessi andrebbero in fumo 4 anni di lavoro.

Help me !!!
 
Così al volo questo dovrebbe darti più o meno l'idea, naturalmente i campi sono da settare come anche le FK...
Spero vada più o meno bene e che soprattutto soddisfi le tue esigenze!
 

Allegati

  • Like
Reactions: elpirata

Discussioni simili