Para determinado cenário, eu:
- criar categorias da tabela para armazenar cada categoria
- criar tabela category_fields para armazenar cada campo de categoria
- criar tabela collected_categories para armazenar todos os dados coletados dos campos de categoria em hash serializado
Os dados coletados podem ser facilmente (des) serializados na coluna de texto (independentemente do mecanismo de banco de dados que você usará).
Verifique as fontes que utilizam seu problema:formulários dinâmicos