una soluzione TUTTA basata sul codice (e dipendente in particolare dalle prestazioni necessarie) è quella di taggare.

sostanzialmente usando un campo BLOB ci mettei dentro qualcosa del tipo
taglia=xxx;colore=yyy;forma=zzz

questo darà la massima libertà di definizione all'utente (è banale creare una tabella delle tag da cui attingere) MA...
... lato applicazione dovrai farti le funzioncine (o i metodini, se lavori ad oggetti)

codificatag:elenco_stringhe-> stringa
decodificatag:stringa -> lista tag, lista valori
cercatag
aggiungitag
cambiatag
eliminatag

il "vero" problema è la ricerca, che richiede dei LIKE %taglia=qualcosa;% il che è decisamente devastante se hai molte righe e/o molte interrogazioni.

In questo caso, normalmente, uso sphinx per "trasformare" le ricerche in full text, con performances di pochi millisecondi su tabelle di milioni di righe

----------
Questo è UN approccio, non L' approccio, spero comunque di averti dato qualche spunto di riflessione