i range si estrapolano automaticamente tramite una query "pivot", oppure, se il DB usato non lo prevede, si può eseguire la stessa cosa con delle select condizionali (CASE... THEN).
Quindi avrai ad esempio queste colonne:
id | name | year | magic
e poi fai l'estrazione degli elementi facendo un pivot sulla colonna "magic" impostando come condizioni i vari range che ti servono.
La stessa tecnica si usa comunemente per fare i report di vendita, ad esempio tirando fuori tutti gli ordini erogati in un dato range temporale (ad esempio gli ordini raggruppati mensilmente), facendo pivoting sulla colonna della data d'ordine. Non avrebbe senso aggiungere alla tabella una colonna nuova ogni mese!