Fui educado na velha escola - onde aprendemos a projetar o esquema do banco de dados ANTES da camada de negócios do aplicativo (ou usando o OOAD para todo o resto). Eu fui muito bom em projetar esquemas (IMHO :) e normalizei apenas para remover redundância desnecessária, mas não onde isso afetava a velocidade. Mas principalmente não era.
Com o advento de algumas estruturas ORM como o ActiveRecord do Ruby ou o ActiveJDBC (e algumas outras que não me lembro, mas tenho certeza de que há muitas), parece que elas preferem ter uma chave substituta para todas as tabelas, mesmo que algumas tenham chaves primárias como 'email' - quebrando 2NF diretamente. Ok, eu não entendo muito, mas isso me dá nos nervos (quase) quando alguns desses ORMs (ou programadores) não reconhecem 1-1 ou 1-0 | 1 (ou seja, 1 a 0 ou 1). Eles estipulam que é melhor ter tudo como uma grande mesa, não importa se há uma tonelada de nulls
"sistemas de hoje em dia", é o comentário que eu ouvi com mais frequência.
Concordo que as restrições de memória tiveram uma correlação direta com a normalização (também existem outros benefícios :), mas hoje em dia com memória barata e máquinas quad-core, o conceito de normalização de banco de dados é deixado apenas para os textos? Como DBAs você ainda pratica a normalização para 3NF (se não for BCNF :)? Isso importa? O design do "esquema sujo" é bom para os sistemas de produção? Como se deve defender a normalização "se" ainda é relevante.
( Observação: não estou falando dos esquemas em estrela / floco de neve do datawarehouse que têm redundância como parte / necessidade do design, mas sistemas comerciais com um banco de dados de back-end como o StackExchange, por exemplo)
fonte
Quanto mais as coisas mudam, mais elas permanecem iguais. Sempre houve desenvolvedores preguiçosos que cortam custos ou simplesmente não sabem ou querem seguir as melhores práticas. Muitas vezes eles conseguem se safar em aplicações menores.
Costumava colocar estruturas de dados inspiradas em COBOL no RDBMS inicial, ou na bagunça horrível que era o dBase. Agora são ORMs e "Code-First". No final, essas são apenas maneiras de as pessoas tentarem encontrar a bala de prata de obter um sistema operacional sem "perder" tempo pensando muito sobre o que você quer e precisa fazer. Estar com pressa sempre foi um problema e sempre será um problema.
Para aqueles que têm bom senso (e boa sorte) dedicando um tempo para projetar adequadamente, o modelo de dados sempre será o local mais lógico para começar. O que existe no banco de dados são informações sobre as coisas (tangíveis e intangíveis) com as quais sua empresa se importa. O que sua empresa se importa muda muito menos rapidamente do que a forma como sua empresa opera. É por isso que seu banco de dados geralmente é muito mais estável que seu código.
O banco de dados é a base legítima de qualquer sistema, e dedicar um tempo para estabelecer suas bases corretamente irá inevitavelmente beneficiar você a longo prazo. Isso significa que a normalização sempre será uma etapa importante e útil para qualquer aplicativo do tipo OLTP.
fonte
As restrições de memória ainda são importantes. Quantidade não é problema, velocidade é.
Parte desse terreno foi abordada em Quando usar TINYINT sobre INT? que você pode achar útil. Eu também sugeriria seguir as palhaçadas do @ThomasKejser ( blog ) da equipe SQLCAT, pois elas tendem a estar na ponta afiada de aumentar o desempenho do banco de dados. A publicação recente sobre O efeito dos caches de CPU e padrões de acesso à memória e a apresentação do SQLBits na modelagem relacional para a escala extrema de DW são bons exemplos.
fonte
Na minha opinião, ainda é apenas sobre o equilíbrio entre normalizar e des-normalizar . Concordo totalmente que as estruturas ORM são apenas abordagens para fazer as coisas, mas não acho que sejam essas estruturas que estão causando a tendência de des normalização .
ainda é esse debate que você quer eficiência de tempo ou eficiência de espaço. No momento em que a teoria do banco de dados relacional é apresentada, o armazenamento em disco é caro, as pessoas obviamente não querem gastar muito dinheiro com isso, é por isso que naquele tempo os bancos de dados relacionais são os que se mantêm firmes em meio às adversidades
Hoje em dia as coisas são bem diferentes, o armazenamento é muito, muito barato. Então, obviamente, podemos tolerar mais redundância em comparação com os velhos tempos, também é por isso que a abordagem BIG_TABLE apareceu. a fim de buscar mais eficiência de tempo, a eficiência do espaço deve ser sacrificada.
Mas, a abordagem de mesa grande também não é o fim da história, ainda é o equilíbrio entre tempo e espaço, em termos de dados de volume do PB para gerenciar, alguns desenvolvedores também começaram a buscar o equilíbrio de volta à eficiência do espaço, é por isso que são trabalhos feitos para normalizar alguns dados em estruturas do tipo BIG-TABLE.
Em uma palavra, a abordagem de normalização não está morta definitivamente, mas comparada com os velhos tempos, ela é definitivamente ignorada.
fonte
CJ Date responde à sua pergunta aqui - o vídeo de normalização (preliminar) é gratuito.
http://shop.oreilly.com/product/0636920025900.do
A resposta curta: normalização é a maneira matematicamente correta de fazer as coisas. Se você não normalizar corretamente, seu modelo de dados está simplesmente incorreto.
fonte