Latar Belakang
Saya menulis banyak laporan besar untuk dan umumnya memelihara catatan kesehatan besar DB (menulis SP, fungsi, pekerjaan, dll.). Skema asli, dan perangkat lunak yang menggunakannya, berasal dari vendor yang berbeda, jadi saya tidak bisa banyak berubah tentang hal itu secara struktural. Ada banyak catatan yang memerlukan pelacakan seperti laboratorium, prosedur, vaksin, dll. Dan mereka tersebar di puluhan meja, banyak di antaranya membengkak dan indeksnya buruk (saya sudah bisa memperbaikinya).
Masalah
Masalahnya adalah karena kita memiliki sedikit kendali atas DB, dan karena dapat berubah dari pembaruan atau tambalan apa pun, itu membuat penulisan dan pemeliharaan laporan ini menjadi sulit dan melelahkan - terutama ketika ada banyak tumpang tindih. Yang diperlukan hanyalah satu tambalan dan saya buntu menulis ulang sebagian besar laporan. Selain itu, kueri dengan cepat menjadi dikaburkan dan lambat saat bergabung, bersarang memilih, dan menerapkan tumpukan.
"Solusi" saya
Rencana saya adalah untuk menulis semua catatan ini ke satu tabel "catch-all", dan menulis pemicu pada tabel asli untuk mempertahankan catatan dalam tabel agregat ini. Tentu saja saya perlu memastikan pemicu saya tetap utuh setelah pembaruan, tetapi ini akan jauh lebih mudah dari sudut pandang rawatan, dan hanya merujuk data.
Tabelnya akan tipis dan panjang, hanya menyimpan data yang diperlukan, sesuatu seperti ini:
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)
)
Kemudian saya akan memiliki berbagai tabel relasional untuk hal-hal seperti pengelompokan type_id dan item.
Saya mulai menebak ide ini karena beberapa tabel ini ditulis untuk sedikit, SP dan laporan yang akan saya tulis akan referensi data banyak juga. Jadi saya khawatir bahwa tabel ini akan menjadi penguncian rekor dan mimpi buruk kinerja dengan begitu banyak I / O.
Pertanyaan saya
Apakah itu ide yang buruk atau bagus? Saya menyadari setiap situasi berbeda dalam SQL Server (2008 r2 Edisi Standar BTW), dan aturan "kadang-kadang", tapi saya benar-benar hanya mencari saran umum.
Saya mulai mempertimbangkan untuk menggunakan broker layanan, tetapi saya hanya akan melakukan pembaruan / sisipan sederhana ( Lihat alternatif untuk jawaban yang diterima ). Data dalam banyak kasus harus realtime, jadi menggunakan cadangan DB tidak akan berfungsi. Kinerja sudah agak menjadi masalah bagi kami, tetapi sebagian besar terkait perangkat keras yang akan segera diatasi.