Ciao a tutti.
premesso che ho cercato abbastanza a lungo sul forum senza trovare una risposta definitiva al mio quesito... sto lavorando ad un gestionale particolarmente impegnativo (per me), basato su php/mysql-phpmyadmin etcc..
Nella progettazione sono stato attento a come strutturare le tabelle, applicando tutte le regole per una buona normalizzazione, e applicando indici di vario tipo per ottimizzare le query.
In php ho costruito query anche complicate (5-6 campi da visualizzare basati su 5 inner join+left join+where), ottenendo comunque performance direi buone, sempre sotto 0.004 sec. di elaborazione. Attraverso EXPLAIN SELECT mi sembra di vedere che gli indici vengano spremuti bene, quindi nel complesso credo di procedere bene.
I dubbi riguardano le FOREIGN KEY, in particolare:
- ho capito che danno la possibilità di eseguire delle operazioni in automatico (update/delete) fra due tabelle collegate da un indice dello stesso tipo, ma mi sembra un po' "pericoloso" e anche "rigido" automatizzare il tutto in questo modo ! Al momento il mio gestionale non prevede cancellazione di record da tabelle "padre" (ad esempio "cliente"), e anche le cancellazioni/modifiche di record delle tabelle figlie (ad esempio "ordini lavorazione") sono molto limitate in numero e comunque verrebbero fatte ad-hoc manualmente su phpmyadmin.In pratica non sarebbe permesso ad esempio cancellare un cliente, ma solo aggiungerne di nuovi
Arriverei quindi alla conclusione di preferire singole query di update/delete separate tramite php, e non meccanismi automatizzati...
- non ho capito se la "robustezza" e le performance del database possono migliorare se genero delle foreign key fra le tabelle o se in qualche modo "dico" a mysql che ci sono legami fra due colonne indicizzate che appartengono a tabelle diverse. Come scritto sopra la mia struttura ha una sua logica, che però è al momento esplicitata solo alivello cartaceo.
Una buona programmazione in php può - in sintesi - evitare violazioni di integrità del database ?
Grazie come sempre per qualsiasi contributo.
![]()
Stefano