Creo que todos estamos familiarizados con la normalización de la base de datos .
Mi pregunta es: ¿Cuáles son algunas pautas que utiliza cuando desea desnormalizar las tablas?
database-design
Ricardo
fuente
fuente
Respuestas:
Desormalizar cuando se trata de operaciones OLAP, normalizar cuando OLTP (del artículo vinculado en la sección Desormalización)
fuente
Normalizar hasta que duela, desnormalizar hasta que funcione (es decir, el rendimiento se vuelve aceptable) :)
fuente
Una razón potencialmente sensata para aplicar la desnormalización controlada es si le permite aplicar alguna restricción de integridad a los datos que de otro modo no sería posible. La mayoría de los DBMS de SQL tienen un soporte extremadamente limitado para las restricciones de varias tablas. En SQL, a veces, la única forma efectiva de implementar ciertas restricciones es asegurarse de que todos los atributos involucrados en la restricción estén presentes en la misma tabla, incluso cuando la normalización dicte que pertenecen a tablas separadas.
La desnormalización controlada significa que se implementan mecanismos para garantizar que no puedan surgir inconsistencias debido a datos redundantes. El costo de estos controles adicionales y el riesgo de datos inconsistentes deben considerarse al decidir si vale la pena la desnormalización.
Otra razón común para la desnormalización es permitir algún cambio en las estructuras de almacenamiento o permitir alguna otra optimización física que el DBMS de otra manera no permitiría. De acuerdo con el principio de Independencia de datos físicos, un DBMS debe tener los medios para configurar estructuras de almacenamiento interno sin alterar innecesariamente la representación lógica de los datos en la base de datos. Desafortunadamente, muchos DBMS son muy restrictivos de las opciones de implementación física disponibles para cualquier esquema de base de datos. Tienden a comprometer la independencia de la base de datos física al admitir solo una implementación subóptima del modelo lógico deseado.
Debería ser obvio, pero aún debe decirse: en todos los casos, solo los cambios en las características de implementación física pueden dictar el rendimiento, características como estructuras de datos internas, archivos, indexación, hardware, etc. La normalización y la desnormalización no tienen nada que ver con el rendimiento o la optimización del almacenamiento.
fuente
Desnormalice si está accediendo frecuentemente a datos calculados, como se sugiere en las respuestas a esta pregunta . El costo de almacenar y mantener los datos calculados a menudo será menor que el costo de volver a calcularlos una y otra vez si su perfil de carga es pesado.
fuente
Rutinariamente desnormalizo para poder hacer cumplir la integridad de los datos con restricciones. Un ejemplo es una pregunta reciente en este sitio : reproduzco una columna en otra tabla para poder usar una restricción CHECK para compararla con otra columna. Otro ejemplo de esta técnica es mi publicación de blog .
No puede usar las restricciones CHECK para comparar columnas en diferentes filas o en diferentes tablas, a menos que ajuste dicha funcionalidad en UDF escalares invocados a partir de una restricción CHECK. ¿Qué sucede si realmente necesita comparar columnas en diferentes filas o en diferentes tablas para hacer cumplir una regla empresarial? Por ejemplo, suponga que conoce las horas de trabajo de un médico y desea asegurarse de que todas las citas se ajusten dentro de las horas de trabajo. Por supuesto, puede usar un disparador o un procedimiento almacenado para implementar esta regla empresarial, pero ni un disparador ni un procedimiento almacenado pueden brindarle una garantía del 100% de que todos sus datos estén limpios: alguien puede deshabilitar o soltar su disparador, ingrese algunos datos sucios, y vuelva a habilitar o recrear su disparador. Además, alguien puede modificar directamente su tabla sin pasar por los procedimientos almacenados.
Permítanme demostrar cómo implementar esta regla de negocios usando solo restricciones FK y CHECK, eso garantizará que todos los datos satisfagan la regla de negocios siempre y cuando todas las restricciones sean confiables.
Sin embargo, otro ejemplo es una forma de hacer cumplir que los períodos de tiempo no tengan brechas ni superposiciones .
fuente
Fulfillable
tabla con todos los detalles de cada elemento que se puede cumplir, y luego hay unaFulfillableQueue
tabla que implementa la cola en SQL Server . Solo los Fulfillables con un ciertoStateID
pueden estar en la cola.StateID
está en laFulfillable
tabla, pero lo replicoFulfillableQueue
y luego impongo esta restricción conFOREIGN KEY
yCHECK
restricciones.