Estou tendo problemas para descobrir exatamente como colocar bons limites para quando e onde usar as tabelas de pesquisa em um banco de dados. A maioria das fontes que procurei diz que nunca posso ter muitos, mas, em algum momento, parece que o banco de dados seria dividido em tantas partes que, embora possa ser eficiente, não é mais gerenciável. Aqui está um exemplo conjunto do que estou trabalhando:
Digamos que eu tenho uma tabela chamada Funcionários:
ID LName FName Gender Position
1 Doe John Male Manager
2 Doe Jane Female Sales
3 Smith John Male Sales
Finja por um momento que os dados são mais complexos e contêm centenas de linhas. A coisa mais óbvia que vejo que poderia ser movida para uma tabela de pesquisa seria Posição. Eu poderia criar uma tabela chamada Positions e colar as chaves estrangeiras da tabela Positions na tabela Employees na coluna Position.
ID Position
1 Manager
2 Sales
Mas até que ponto posso continuar dividindo as informações em tabelas de pesquisa menores antes que elas se tornem incontroláveis? Eu poderia criar uma tabela de Gênero e ter 1 correspondente a Masculino e 2 correspondente a Fêmea em uma tabela de pesquisa separada. Eu poderia até colocar LNames e FNames em tabelas. Todas as entradas "John" são substituídas por uma chave estrangeira 1 que aponta para a tabela FName que indica que um ID 1 corresponde a John. No entanto, se você descer muito longe dessa toca de coelho, sua tabela Funcionários será reduzida a uma bagunça de chaves estrangeiras:
ID LName FName Gender Position
1 1 1 1 1
2 1 2 2 2
3 2 1 1 2
Embora isso possa ou não ser mais eficiente para um servidor processar, isso certamente é ilegível para uma pessoa normal que pode estar tentando mantê-lo e dificulta o acesso de um desenvolvedor de aplicativos. Então, minha verdadeira pergunta é até que ponto é longe demais? Existem "práticas recomendadas" para esse tipo de coisa ou um bom conjunto de diretrizes em algum lugar? Não consigo encontrar informações on-line que realmente definam um conjunto de diretrizes úteis e úteis para esse problema em particular. O design do banco de dados é velho para mim, mas o BOM design do banco de dados é muito novo; portanto, respostas muito técnicas podem estar na minha cabeça. Qualquer ajuda seria apreciada!