Fui educado en la vieja escuela, donde aprendimos a diseñar el esquema de la base de datos ANTES de la capa empresarial de la aplicación (o usando OOAD para todo lo demás). He sido bastante bueno diseñando esquemas (en mi humilde opinión :) y normalizado solo para eliminar la redundancia innecesaria, pero no donde afecta la velocidad, es decir, si las uniones fueron un golpe de rendimiento, la redundancia se mantuvo en su lugar. Pero sobre todo no lo fue.
Con la llegada de algunos marcos ORM como ActiveRecord o ActiveJDBC de Ruby (y algunos otros que no recuerdo, pero estoy seguro de que hay muchos) parece que prefieren tener una clave sustituta para cada tabla, incluso si algunos tienen claves principales como 'correo electrónico' - rompiendo 2NF directamente. De acuerdo, no entiendo demasiado, pero me pone de los nervios (casi) cuando algunos de estos ORM (o programadores) no reconocen 1-1 o 1-0 | 1 (es decir, 1 a 0 o 1). Ellos estipulan que es mejor tener todo como una gran mesa, sin importar si tiene un montón de nulls
"los sistemas de hoy pueden manejarlo" es el comentario que he escuchado con más frecuencia.
Estoy de acuerdo en que las restricciones de memoria tenían una correlación directa con la normalización (también hay otros beneficios :) pero en la actualidad, con la memoria barata y las máquinas de cuatro núcleos, ¿queda el concepto de normalización de DB solo en los textos? Como DBA, ¿todavía practica la normalización a 3NF (si no es BCNF :)? ¿Importa? ¿El diseño de "esquema sucio" es bueno para los sistemas de producción? ¿Cómo debería uno hacer el caso "para" la normalización si todavía es relevante?
( Nota: no estoy hablando de los esquemas de estrella / copo de nieve de datawarehouse que tienen redundancia como parte / necesidad del diseño, sino sistemas comerciales con una base de datos de fondo como StackExchange, por ejemplo)