O que você precisa considerar ao projetar tabelas não é necessariamente o que eles terão acesso e como isso é semelhante/diferente, mas sim como os próprios níveis de usuário são semelhantes/diferentes.
Por exemplo, se os tipos de usuário tiverem os mesmos atributos (nome, email, data de nascimento etc.), eles pertencem a uma tabela junto com uma coluna indicando seu nível de privilégio.
Isso também facilita a alteração dos níveis de privilégio de um usuário, por meio do qual você pode transformar um funcionário comum em um administrador, por exemplo, apenas atualizando o registro na tabela de usuários.
Se os fornecedores forem um tipo de objeto diferente com atributos diferentes dos outros dois, os fornecedores podem pertencer à sua própria tabela.
Ou, mais uma coisa a considerar:você pode usar um
users
tabela que contém apenas informações muito limitadas sobre usuários de todos os três tipos, e se os tipos tiverem atributos estendidos que não se relacionam bem entre si, você pode armazená-los em outras tabelas com uma chave estrangeira de volta aos usuários principais de users
tabela.