배경
나는 큰 건강 기록 DB (SP, 기능, 작업 등 작성)에 대한 많은 큰 보고서를 작성하고 일반적으로 유지 관리합니다. 원래 스키마와이를 사용하는 소프트웨어는 다른 공급 업체에서 제공 한 것이므로 구조적으로 많은 부분을 변경할 수 없습니다. 실험실, 절차, 백신 등과 같은 추적이 필요한 많은 레코드가 있으며 수십 개의 테이블에 흩어져 있으며, 그 중 많은 부분이 부풀어지고 색인이 잘못되어 있습니다 (일부 문제를 해결할 수있었습니다).
문제
문제는 DB를 거의 제어 할 수없고 특정 업데이트 나 패치에서 변경 될 수 있기 때문에 특히 보고서가 너무 많고 지루한 경우가 많으며 특히 중복되는 부분이 많을 때입니다. 패치 하나만 있으면 12 개 보고서의 상당 부분을 다시 작성해야합니다. 또한 조인, 중첩 선택 및 파일 누적 적용으로 쿼리가 난독 화되고 느려집니다.
내 "솔루션"
내 계획은이 모든 레코드를 하나의 "포괄"테이블에 기록하고 원래 테이블에 트리거를 작성하여이 집계 테이블에 레코드를 유지하는 것입니다. 물론 업데이트 후에도 트리거가 손상되지 않았는지 확인해야하지만 유지 관리 측면에서 보면 데이터를 참조하는 것이 훨씬 쉬울 것입니다.
테이블은 얇고 길며 필요한 데이터 만 저장합니다.
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)
)
그런 다음 type_id 및 항목 그룹화와 같은 다양한 관계형 테이블이 있습니다.
나는이 테이블 중 일부가 꽤 많이 쓰여짐에 따라이 아이디어를 두 번째 추측하기 시작합니다. 내가 작성할 SP 및 보고서는 데이터를 많이 참조 할 것입니다. 따라서이 테이블이 너무 많은 I / O로 인해 레코드 잠금 및 성능 악몽이 될까 걱정됩니다.
내 질문
나쁘거나 좋은 생각입니까? SQL Server (2008 r2 Standard Edition BTW)와 "때때로"규칙에서 모든 상황이 다르다는 것을 알고 있지만 실제로 일반적인 조언을 찾고 있습니다.
서비스 브로커 사용을 고려하기 시작했지만 간단한 업데이트 / 삽입 만 수행하고 있습니다 ( 허용 된 답변의 대안 참조 ). 대부분의 경우 데이터는 실시간이어야하므로 백업 DB를 사용하면 실제로 작동하지 않습니다. 성능은 이미 다소 문제가되지만 대부분은 곧 해결 될 하드웨어 관련입니다.