Hintergrund
Ich schreibe viele große Berichte für eine große Datenbank mit Gesundheitsdaten (SPs, Funktionen, Jobs usw. schreiben) und verwalte diese im Allgemeinen. Das ursprüngliche Schema und die Software, die es verwendet, stammen von einem anderen Anbieter, sodass ich strukturell nicht viel daran ändern kann. Es gibt viele Aufzeichnungen, die nachverfolgt werden müssen, z. B. Labors, Verfahren, Impfstoffe usw., und sie sind über Dutzende von Tabellen verteilt, von denen viele aufgebläht und schlecht indiziert sind (ich konnte dies etwas korrigieren).
Das Problem
Das Problem ist, dass wir nur wenig Kontrolle über die Datenbank haben und dass es schwierig und langwierig ist, diese Berichte zu schreiben und zu pflegen, da sie von einem bestimmten Update oder Patch geändert werden können - insbesondere, wenn große Überschneidungen auftreten. Alles was es braucht ist ein Patch und ich stecke fest, große Teile eines Dutzends von Berichten neu zu schreiben. Darüber hinaus werden Abfragen schnell und langsam verschleiert, wenn Verknüpfungen, verschachtelte Auswahlen und das Anwenden von Stapeln ausgeführt werden.
Meine Lösung"
Mein Plan war es, alle diese Datensätze in eine "Catch-All" -Tabelle zu schreiben und Trigger auf die Originaltabellen zu schreiben, um die Datensätze in dieser Aggregattabelle zu verwalten. Natürlich müsste ich sicherstellen, dass meine Auslöser nach den Aktualisierungen intakt sind, aber dies wäre vom Standpunkt der Wartbarkeit viel einfacher und würde nur auf die Daten verweisen.
Die Tabelle wäre dünn und lang und würde nur die erforderlichen Daten speichern.
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)
)
Dann hätte ich verschiedene relationale Tabellen für Dinge wie type_id und item groupings.
Ich fange an, diese Idee zu überdenken, da einige dieser Tabellen zu einem großen Teil geschrieben sind. Die SPs und Berichte, die ich schreiben würde, würden auch auf die Daten verweisen. Ich befürchte, dass diese Tabelle mit so viel E / A zu einem Albtraum für das Sperren und Ausführen von Datensätzen wird.
Meine Frage
Ist eine schlechte oder eine gute Idee? Ich stelle fest, dass jede Situation in SQL Server (2008 r2 Standard Edition BTW) und der "manchmal" -Regel anders ist, aber ich suche wirklich nur nach allgemeinen Ratschlägen.
Ich habe angefangen, einen Service Broker in Betracht zu ziehen, aber ich führe nur einfache Aktualisierungen / Einfügungen durch ( siehe Alternative zur akzeptierten Antwort ). In vielen Fällen müssen die Daten in Echtzeit vorliegen, sodass die Verwendung einer Sicherungsdatenbank nicht wirklich funktioniert. Die Leistung ist für uns bereits ein Problem, aber das meiste davon hängt mit der Hardware zusammen, die in Kürze behoben wird.