parece muito bom.
Você mostra aprovado_por em 2 tabelas. Se você mantiver a tabela MembershipStatus, é aí que deve pertencer. também -o nome 'approved_by' implica o status de 'approved' que pode ou não existir. pode pensar em outro nome...
você também deve ter uma tabela provavelmente que identifica quais usuários são administradores de quais grupos. dessa forma, você pode codificar a segurança do banco de dados para quem tem permissão para aprovar, bem como armazenar quem realmente aprovou.
além disso, não sou um grande fã de armazenar o histórico de auditoria na tabela como você está mostrando. Use o banco de dados integrado à auditoria ou puxe-o para outra tabela para registrar o histórico de auditoria.
finalmente, id e userid parecem redundantes. vá com userid. (semelhante em outras tabelas)