MySQL - Arrange a table so that it shrinks as much as possible?
Here's general recommendations for keeping table size small


Try ROW_FORMAT=COMPRESSED when creating InnoDB tables. There will be impact on writes.
Use index with prefix 
Use OPTIMIZE TABLE often if it gets many DELETE/UPDATE's


Normalizing tables would actually result in bigger overall size, but less. It MAY help with caching, though.