No desnormalizar.
Diseñe sus tablas de acuerdo con principios de diseño simples y sólidos que harán que sea fácil implementar el resto de su sistema. Fácil de construir, poblar, usar y administrar la base de datos. Fácil y rápido para ejecutar consultas y actualizaciones en contra. Fácil de revisar y extender el diseño de la mesa cuando la situación lo requiera, e innecesario por razones livianas y transitorias.
Un conjunto de principios de diseño es la normalización. La normalización genera tablas que son fáciles y rápidas de actualizar (incluidas las inserciones y eliminaciones). La normalización evita las anomalías de actualización y evita la posibilidad de una base de datos que se contradice a sí misma. Esto evita una gran cantidad de errores al hacerlos imposibles. También evita una gran cantidad de cuellos de botella de actualización haciéndolos innecesarios. Esto es bueno.
Existen otros conjuntos de principios de diseño. Conducen a diseños de mesa que están menos que completamente normalizados. Pero eso no es "desnormalización". Es solo un diseño diferente, algo incompatible con la normalización.
Un conjunto de principios de diseño que conduce a un diseño radicalmente diferente de la normalización es el diseño del esquema en estrella. El esquema de estrella es muy rápido para consultas. Incluso se pueden realizar uniones y agregaciones a gran escala en un tiempo razonable, dado un buen DBMS, buen diseño físico y suficiente hardware para realizar el trabajo. Como era de esperar, un esquema de estrella sufre anomalías de actualización. Debe programar estas anomalías cuando mantiene la base de datos actualizada. En general, necesitará un proceso ETL cuidadosamente controlado y cuidadosamente creado que actualice el esquema en estrella desde otras fuentes de datos (tal vez normalizadas).
El uso de datos almacenados en un esquema de estrella es dramáticamente fácil. Es tan fácil que al usar algún tipo de OLAP y motor de informes, puede obtener toda la información necesaria sin escribir ningún código y sin sacrificar demasiado el rendimiento.
Se necesita un análisis de datos bueno y algo profundo para diseñar un buen esquema normalizado. Los errores y omisiones en el análisis de datos pueden dar como resultado dependencias funcionales no descubiertas. Estos FD no descubiertos resultarán en desvíos involuntarios de la normalización.
También se necesita un análisis de datos bueno y algo profundo para diseñar y construir un buen esquema de estrella. Los errores y las omisiones en el análisis de datos pueden dar como resultado elecciones desafortunadas en dimensiones y granularidad. Esto hará que ETL sea casi imposible de construir, y/o hará que la capacidad de carga de información de la estrella sea inadecuada para las necesidades emergentes.
El análisis de datos bueno y algo profundo no debe ser una excusa para la parálisis del análisis. El análisis debe ser correcto y razonablemente completo en un corto período de tiempo. Más corto para proyectos más pequeños. El diseño y la implementación deberían poder sobrevivir algunas adiciones tardías y correcciones al análisis de datos y a los requisitos, pero no a un torrente constante de revisiones de requisitos.
Esta respuesta se amplía a su pregunta original, pero creo que es relevante para el diseñador de la base de datos.
Intenté que el SQL apareciera formateado pero el editor de stackoverflow lo sigue poniendo en una sola línea. – Element
Sangra esas líneas con cuatro espacios para que aparezca como un "bloque de código". –
Necesita mejores dbas, se esperan uniones en las bases de datos y están optimizados para usarlos. Son terriblemente costosas si su dbas no indexó por debajo (los índices de necesidad de FKS) o si los datos son enormes. Incluso allí, conozco personas con bases de datos que tienen un tamaño de terrbits y todavía usan combinaciones. – HLGEM