A OSCON ieri, Josh Berkus ha tenuto un buon tutorial sulla progettazione di DB e ne ha speso una buona parte a strappare senza pietà a tali "EAV "il table; dovresti riuscire a trovare presto le sue slide sul sito OSCON, ed eventualmente la registrazione audio di tutto il suo tutorial online (quest'ultimo probabilmente richiederà un po' di tempo).
Avrai bisogno di un join per attributo (più istanze dei values
tabella, uno per attributo che stai recuperando o aggiornando), quindi non so cosa intendi con "meno tabelle di join". L'unione di molte istanze della stessa tabella non è un'operazione particolarmente rapida e il tuo design rende gli indici quasi irrealizzabili e inutilizzabili.
Almeno come miglioramento minore, usa tabelle separate per tipo per i valori dei tuoi attributi (forse un po' di indicizzazione potrebbe essere applicabile in quel caso, anche se con la limitazione di MySQL a un indice per query per tabella anche questo è alquanto dubbio).