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

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

  • struttura.zip
    2,2 KB · Visite: 540

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
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.
 

elpirata

Utente Attivo
18 Mar 2009
264
7
18
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 !!!
 

macus_adi

Utente Attivo
5 Dic 2017
1.343
91
48
IT/SW
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

  • sql.zip
    764 bytes · Visite: 350
  • Like
Reactions: elpirata
Discussioni simili
Autore Titolo Forum Risposte Data
K form Inserimento record mysql PHP 2
P Mysql lento a cancellare MySQL 1
P Codifica caratteri speciali mysql php PHP 0
N MAX() + ADD_DATE - per update su Mysql MySQL 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
W MySQL ciclo in SELECT MySQL 0
L Mysql gestionale multipiattaforma MySQL 0
W MySQL SELECT list dinamica MySQL 0
M utilizzo mysql in nodejs - crea createdAt e updateAt MySQL 1
T colonne di tabelle mysql ordinate MySQL 0
M Sintassi "personalizzata" per mysql workbench? MySQL 0
A Mysql MySQL 0
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
Z Controllo giorni MYSQL PHP 0
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
L Mysql: Nascondere le pagine dopo una ricerca PHP 1
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
Z MySql injection PHP PHP 1
D controllare valore in tabella mysql PHP 0
A pulsante di update campo mysql con javascript Javascript 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
T differenza fra mysql xampp e un mysql server Database 0
R Importazione csv su mysql tramite array PHP 2
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
D problema php mysql PHP 1
D problema php mysql PHP 1
N Server mysql non raggiungibile da connessione esterna MySQL 1
B Crea pdf da tabella mysql "ultima riga modificata" MySQL 4
D evitare di inserirre duplicati in mysql PHP 4
L salvare codice html in mysql PHP 3
L Google chart php mysql PHP 2
S Gestire scelta dropdown con dati da Mysql PHP 2
K cron job mysql PHP 3
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
R Errore UPDATE tabella mysql PHP 1
R Caricamento immagine su cartella remota + mysql PHP 3
D Emoji in mysql Database 0
L Aiuto per programma web php/mySQL PHP 2
S Problema esportazione tabelle Mysql in Excel PHP 0
S Cancellare una riga MYSQL PHP 1
L Ricerca valore mysql e incremento PHP 73
G database mysql contengono informazioni ? MySQL 0
G Testo in mysql format 3 MySQL 0

Discussioni simili