Seu caso se parece com uma instância de classe/subclasse.
Existem duas maneiras clássicas de projetar tabelas SQL para lidar com subclasses. Cada um tem vantagens e desvantagens.
Uma maneira é chamada de "Herança de Tabela Única". Neste design há apenas uma mesa para todos os tipos de usuários. Se uma determinada coluna não pertence a uma determinada linha, a interseção é deixada NULL. Uma coluna pode ser adicionada para indicar o tipo de usuário.
Outra maneira é chamada de "Herança de tabela de classe". Isso é muito parecido com a resposta que Nanego deu, com algumas pequenas mudanças. Há uma tabela para usuários, com todos os dados comuns e um campo de id. Há uma tabela para cada subclasse, com dados que pertencem a essa subclasse. O campo id geralmente é configurado como uma cópia do campo id na linha correspondente na tabela de usuários. Desta forma, a chave de subclasse pode fazer dupla função, atuando tanto como chave primária quanto como chave estrangeira referenciando a tabela do usuário. Esta última técnica é chamada de "Chave Primária Compartilhada". Requer um pouco de programação na hora da inserção, mas vale a pena. Ele reforça a natureza de um para um do relacionamento e acelera as junções necessárias.
Você pode procurar todos esses três designs como tags no SO ou como artigos na web.
single-table-inheritance class-table-inheritance shared-primary-key