[Php-it] Mysql e foreign keys.

Andrea Franceschini therealmorpheu5 at gmail.com
Fri May 4 14:25:52 CEST 2007


Il 04/05/07, Fabio<fabiogandola a tiscali.it> ha scritto:

> Ipotizzo di avere una tabella "anagrafica" con colonne 'nome' e 'cognome'
> con 100.000.000 record.
> Nella colonna 'nome' apparirà magari 1.000.000 di volte: 'Fabio', e quindi
> ipotizziamo che butterò via 5 bytes * 1M, cioè 5MiB inutilmente...

Un po' di meno, per la verita'.

> In sostanza, quello che mi domando, è se con MySQL, se imposto come foreign
> key una colonna varchar, lui è in grado di far automaticamnte
> l'ottimizzazione per evitare di tenere salvate N volte le stesse stringhe?

Sei crudele. Vuoi far fare a MySQL quello che dovresti fare tu
progettando meglio il tuo schema. E' chiaro che la scelta che hai in
mente è migliore per la semplice ragione per cui Bartolomeo occupa 5
byte (solo 5?) in più rispetto a Fabio, e non per ragioni razziali
verso chi ha il nome più lungo. Nella migliore delle ipotesi, un
intero a 32 bit indicizza invece più di quattro miliardi di persone
diverse nello spazio di 4 byte, sia per Fabio che per Bartolomeo. La
chiave esterna referente è solo un meccanismo per garantire il
rispetto dei vincoli di integrità referenziale tra le tabelle e, se
anche MySQL lavorasse come tu vorresti (zappando via i nomi e
sostituendoli con un hash di 4 byte), la cosa che devi fare tu è
supporre che non lo faccia.

Abbiamo inventato i computer per fare velocemente compiti ripetitivi,
non per sopperire a mancanze di progettazione. Oppure mi è sfuggito
cosa intendevi.

(hint: se il DB non lo puoi toccare, io dico che lo puoi toccare lo stesso :)


More information about the Php-it mailing list