É impossível dizer se um design de banco de dados específico é ruim sem saber o que o aplicativo está fazendo, a forma dos dados, as expectativas de desempenho e assim por diante. Embora geralmente a normalização (até certo ponto) seja vista como uma prática recomendada, é bastante comum desnormalizar áreas de bancos de dados por razões de desempenho tão boas e ruins são muito abertas para discussão sem muito mais dados do que a maioria das pessoas quando inicia.
Adicione as muitas abordagens que podem ser adotadas para objetar aos mapeamentos relacionais e as coisas se tornam ainda mais complexas, pois a "melhor" estrutura de banco de dados dependerá do modelo de objeto específico, do nível de herança e assim por diante.
Ao adotar uma abordagem de tamanho único, as bibliotecas de persistência ORM quase sempre produzem uma estrutura de banco de dados não ideal para qualquer situação e usam algumas coisas que podem ser vistas como uma má prática para uma determinada situação .
Você certamente poderia escrever um ORM que normalizasse, mas veria implicações de desempenho bastante pesadas, pois para cada inserção em uma tabela principal era necessária a varredura das várias tabelas de consulta para verificar se existiam valores, se obtiveram suas chaves e se não obtiveram. execute as inserções relevantes.
(Quando você faz isso manualmente, pode cortar um pouco disso, pois sabe que os apresentou com uma lista suspensa contendo apenas um valor válido, para que você não precise fazer essas pesquisas, basta usar a tecla feliz como está indo para ser válido, o ORM não pode fazer essa suposição, pois não controla a interface do usuário.)
Mas o que você deve se lembrar é que eles não pretendem otimizar o desempenho do banco de dados ou a integridade dos dados, mas sim a velocidade do desenvolvimento . Se a estrutura específica de seus dados é importante para você, você precisa codificar seus mapeamentos de objeto / RDBMS manualmente ou, pelo menos, fazer uma avaliação detalhada de todas as bibliotecas disponíveis e selecionar a que melhor atenda às suas necessidades ( se existir).
Essencialmente, tudo se resume a requisitos e à troca entre dados bem estruturados, desempenho do banco de dados e velocidade de desenvolvimento. Tal como acontece com muitos trade-offs, você não escolhe todos os três.