Oi @Maykon_Mendel,
Esse é um tema que sempre tive interesse e nunca vi uma soluçao que achasse realmente boa, sendo usada na prática.
Eu tentei participar desse tópico aqui: Complexidade x Simplicidade | Teóricos x Práticos
Mas no fim das contas nenhuma conclusao foi alcançada.
Hoje em dia, a primeira coisa que iria analisar é se o comportamento dessas entidades sao diferentes: Que métodos a classe Prefeitura tem que a Secretaria nao tem?
Segundo, eu tentaria identificar que tipo de informaçao você precisa armazenar pra cada uma dessas entidades.
Se todas tem comportamentos em comum, mas com dados diferentes, eu criaria interfaces pra identificar os comportamentos e uma classe pra cada, para persistir dados.
Um aspecto muito comum, que geralmente é ignorado, é o tempo para essas relaçoes. Você pode ter o funcionário José no ano 1, que sai da sua empresa e vira um Fornecedor no ano 2 e finalmente abre sua própria empresa, virando o contato de uma empresa, no ano 3, que ainda é seu fornecedor. Como você representa isso?
Eu gosto da idéia de separar dados que nao mudam sobre uma pessoa física (cpf, nome) ou pessoa jurídica (cnpj, nome fantasia, razao social) dos dados que mudam conforme o relacionamento delas com sua empresa (funcionário, fornecedor, etc).