No necesariamente de una forma u otra: no existe una regla simple sobre el nivel adecuado de normalización.
Las bases de datos demasiado normalizadas pueden ser “difíciles” de descubrir cómo unirse, o requieren múltiples combinaciones a través de un árbol de tablas, cada una de las cuales requiere búsquedas de índice o escaneos de tablas (con suerte no escaneos de tablas, eso es realmente una discusión sobre la indexación adecuada). También existe la posibilidad de múltiples rutas a los mismos datos, con esas rutas que expresan diferentes relaciones entre ellos.
La normalización requiere muchos más resultados de índice, pero generalmente da como resultado tablas más pequeñas y una mayor densidad de información = menos espacio de almacenamiento. Los resultados de índice son rápidos para obtener información específica, pero engorrosos si va a terminar seleccionando una parte significativa de los datos y, por lo tanto, tiene muchas claves para manejar, combinar y realizar un seguimiento)
- ¿Cuál es la diferencia entre PORTCbits.RC7 = 0 y TRISCbits.RC7 = 0 en PIC18F4550?
- Quiero que mi robot Atmega funcione en múltiples modos (seguimiento de línea, evitación de obstáculos, guía directa de PC) ¿Cómo puedo cargar y cambiar entre ellos?
- ¿Cómo utiliza la informática el método científico?
- ¿Qué se necesita para crear una aplicación web de servicio como Care.com?
- ¿Qué debo tener en cuenta al construir una computadora?
Las bases de datos normalizadas pueden ser muy eficientes cuando generalmente busca un conjunto específico de registros, como encontrar una sola coincidencia con un nombre de cliente o bases de datos transaccionales. Las bases de datos desnormalizadas tienen una mejor aplicabilidad cuando procesa una gran cantidad de datos sin tener en cuenta los detalles específicos, como podría ser para los informes resumidos, más como el almacenamiento de datos.
Las bases de datos infra-normalizadas pueden tener muchos más registros y datos esencialmente redundantes, teniendo el efecto de simplificar la consulta en términos de combinaciones, pero tal vez aumentando la complejidad de las cláusulas where, si tienen que analizar los datos. En el caso grave (que realmente he visto en las bases de datos de producción), varios datos se encuentran dentro de un campo y están separados por delimitadores (y otras ridiculidades similares).
La subnormalización puede llevar a que la base de datos pase por un gran número de registros (mayor tiempo de acceso, errores de almacenamiento en caché) y análisis adicional de valores dentro de los campos (muy lento, tal vez requiera escaneos completos de la tabla). Si las consultas no se conocen de antemano, realmente no se puede predecir qué se puede juntar para desnormalizarlo. Si finalmente se le solicita una consulta que requiere el análisis de un campo, esta consulta puede llevar mucho, mucho tiempo.
Para responder una pregunta específica, la mejor manera es crear un conjunto de datos representativo y modelarlo en ambos sentidos y probar algunas consultas que necesite y ver cuál funciona mejor. Mi experiencia es que las personas generalmente crean bases de datos poco normalizadas y dependen de informes y análisis, esto es incorrecto en muchos casos, y los desarrolladores originales deberían haberse normalizado más.
No es una decisión clara: cada uno puede tener ventajas en ciertas situaciones, tendrías que determinar qué funcionará mejor para los casos de uso específicos que vas a encontrar.