> и для каждого из них есть уникальные поля
А как этими полями будут пользоваться? Группировки/фильтры/агрегация по ним будут?
Если будут, то тогда действительно 20 таблиц (и это нормально, т.к. тогда и кода для каждого типа пользователя у вас будет достаточно). И паттерны наследования -
concrete table,
single table,
class table.
Если не будут (т.е. эти поля будут читаться/писаться целиком) - может в JSON поле их?