Eu trabalhei bastante com bancos de dados relacionais e acho que entendo muito bem os conceitos básicos de bom design de esquema. Recentemente, fui encarregado de assumir um projeto em que o DB foi projetado por um consultor altamente pago. Por favor, deixe-me saber se meu intestino intacto - "WTF ??!?" - é garantido, ou esse cara é um gênio que está operando fora do meu reino?
O DB em questão é um aplicativo interno usado para inserir solicitações de funcionários. Apenas olhando uma pequena seção, você tem informações sobre os usuários e informações sobre a solicitação que está sendo feita. Eu projetaria isso assim:
Tabela do usuário:
UserID (primary Key, indexed, no dupes)
FirstName
LastName
Department
Tabela de solicitação
RequestID (primary Key, indexed, no dupes)
<...> various data fields containing request details
UserID -- foreign key associated with User table
Simples, certo?
O consultor o projetou assim (com dados de amostra):
UsersTable
UserID FirstName LastName
234 John Doe
516 Jane Doe
123 Foo Bar
Departamentos
DepartmentID Name
1 Sales
2 HR
3 IT
UserDepartmentTable
UserDepartmentID UserID Department
1 234 2
2 516 2
3 123 1
RequestTable
RequestID UserID <...>
1 516 blah
2 516 blah
3 234 blah
Todo o banco de dados é construído assim, com todos os dados encapsulados em sua própria tabela, com IDs numéricos vinculando tudo. Aparentemente, o consultor havia lido sobre OLAP e queria a "velocidade das pesquisas de números inteiros"
Ele também possui um grande número de procedimentos armazenados para fazer referência cruzada a todas essas tabelas.
Esse design é válido para um banco de dados SQL de pequeno a médio porte?
Obrigado por comentários / respostas ...