Antecedentes
Escribo muchos informes grandes y generalmente mantengo una base de datos de registros de salud grandes (escribo SP, funciones, trabajos, etc.). El esquema original, y el software que lo usa, es de un proveedor diferente, por lo que no puedo cambiar mucho estructuralmente. Hay muchos registros que requieren seguimiento, como laboratorios, procedimientos, vacunas, etc., y están dispersos en docenas de tablas, muchas de las cuales están hinchadas y mal indexadas (he podido solucionar esto de alguna manera).
El problema
El problema es que debido a que tenemos poco control sobre el DB, y dado que puede cambiar desde cualquier actualización o parche, hace que escribir y mantener estos informes sea difícil y tedioso, especialmente cuando hay una gran cantidad de superposición. Todo lo que se necesita es un parche y estoy atascado reescribiendo grandes porciones de una docena de informes. Además, las consultas se ofuscan rápidamente y se ralentizan a medida que las uniones, las selecciones anidadas y las aplicaciones se acumulan.
Mi solución"
Mi plan era escribir todos estos registros en una tabla "general" y escribir desencadenantes en las tablas originales para mantener los registros en esta tabla agregada. Por supuesto, tendría que asegurarme de que mis disparadores estuvieran intactos después de las actualizaciones, pero esto sería mucho más fácil desde el punto de vista de la mantenibilidad, y solo haciendo referencia a los datos.
La tabla sería delgada y larga, almacenando solo los datos requeridos, algo como esto:
CREATE TABLE dbo.HCM_Event_Log (
id INT IDENTITY,
type_id INT NULL,
orig_id VARCHAR(36) NULL,
patient_id UNIQUEIDENTIFIER NOT NULL,
visit_id UNIQUEIDENTIFIER NULL,
lookup_id VARCHAR(50) NULL,
status VARCHAR(15) NULL,
ordered_datetime DATETIME NULL,
completed_datetime DATETIME NULL,
CONSTRAINT PK_HCM_Event_Log PRIMARY KEY CLUSTERED (id)
)
Luego tendría varias tablas relacionales para cosas como type_id y agrupaciones de elementos.
Estoy empezando a adivinar esta idea, ya que varias de estas tablas se escriben bastante, los SP e informes que escribiría también harían referencia a los datos. Por lo tanto, me preocupa que esta tabla se convierta en una pesadilla de bloqueo de registros y rendimiento con tanta E / S.
Mi pregunta
¿Es una mala o una buena idea? Me doy cuenta de que cada situación es diferente en SQL Server (2008 r2 Standard Edition BTW) y la regla de "a veces", pero realmente solo estoy buscando consejos generales.
Comencé a considerar el uso de un intermediario de servicios, pero solo realizaría actualizaciones / inserciones simples ( consulte la alternativa a la respuesta aceptada ). Los datos en muchos casos deben ser en tiempo real, por lo que el uso de una base de datos de respaldo no funcionaría realmente. El rendimiento ya es un problema para nosotros, pero la mayor parte de eso está relacionado con el hardware que se resolverá pronto.