Imagino que des normalizar demais desperdiçaria espaço e tempo
O espaço não deve se preocupar com a maioria dos aplicativos OLTP de linha de negócios de tamanho médio. Então deixe espaço de lado. Tempo e pressupor que você quer dizer desempenho da consulta, algo que geralmente pode ser aprimorado e não causa um problema real, a menos que você tenha um design ruim, recursos insuficientes, banco de dados extremamente grande, número muito grande de transações ou todas o de cima. A maioria dos aplicativos que usam os bancos de dados atuais raramente teria um problema de desempenho apenas porque o banco de dados é Normalizado.
os blobs gigantes são duplicados ou são mais difíceis de manter a consistência porque você precisa atualizar vários campos usando uma transação.
A normalização do seu banco de dados garante que você projete:
Não possui dados redundantes.
Não causa a criação de um grande número de enterites de log (por exemplo, com uma tabela de 2 milhões de clientes: UPDATE Customer Set Country = "USA" WHERE Country = "US")
Ser totalmente suportado seja consultas SQL. Este ponto é muito importante.
Dirigirá código de aplicativo limpo.
Forçar um alto grau de consistência dos dados por meio do banco de dados sem sobrecarregar o aplicativo.
Compartilhe regras de negócios definidas no banco de dados por aplicativos diferentes sem codificar o mesmo código em aplicativos diferentes.
Dito isto, a Normalização produz uma estrutura ideal para todas as colunas e tabelas. Isso nem sempre é necessário em seu aplicativo em particular; você poderá determinar, dada sua compreensão do seu domínio e do seu aplicativo, desnormalizar algumas das tabelas / colunas como uma troca de velocidade. No entanto, isso seria uma decisão consciente e não uma supervisão.
Dado um conjunto de 3NF FD e um conjunto de consultas, como prever a aceleração / desaceleração da desnormalização?
Você não pode prever o desempenho com precisão sem testar (o que você pode fazer antes de escrever o código do aplicativo). No entanto, você pode eliminar e detectar fatores que levariam a um desempenho ruim por design. Por exemplo, você pode identificar qual estratégia de índice usar da seguinte maneira (outras técnicas podem existir):
Crie uma matriz de consultas e colunas afetadas por essas consultas.
Encontre as colunas mais usadas.
Considere a criação de índices nessas colunas.
Este é principalmente um trabalho em que o seu DBA pode ajudá-lo. Há mais desempenho do que Normalização. Existem aspectos da distribuição de dados em volumes de disco, divisão vertical de tabela, particionamento, tipos de índice e buffer de índice, para citar alguns. Todas essas técnicas devem ser abordadas nos livros e na documentação do fornecedor nos assuntos "Design do banco de dados" e "Ajuste do desempenho do banco de dados". Toda a discussão acima pressupõe que seu aplicativo é um aplicativo OLTP.