Фон
Я пишу багато великих звітів для і, як правило, підтримую великі бази даних про стан здоров’я (пишуть SP, функції, завдання тощо). Оригінальна схема та програмне забезпечення, яке її використовує, є у іншого постачальника, тому я не можу багато в чому змінити її. Існує багато записів, які потребують відстеження, такі як лабораторії, процедури, вакцини тощо, і вони розкидані по десятках таблиць, багато з яких роздуті і погано індексовані (мені це вдалося дещо виправити).
Проблема
Проблема полягає в тому, що у нас мало контролю над БД, і оскільки він може змінюватися від будь-якого даного оновлення або виправлення, це робить написання та підтримку цих звітів важким і стомлюючим - особливо, коли є велика кількість перекриттів. Все, що потрібно, - це один патч, і я застряг, переписуючи великі порції з десятка доповідей. Крім того, запити швидко стають заплутаними і повільними, коли об'єднання, вкладене місце вибирається і застосовується до накопичення.
Моє "Рішення"
Мій план полягав у тому, щоб записати всі ці записи до однієї таблиці "загальноприйнятих" та записати тригери на початкові таблиці, щоб підтримувати записи в цій сукупній таблиці. Звичайно, мені потрібно було б переконатися, що мої тригери були непошкодженими після оновлень, але це було б набагато простіше з точки зору ремонту та просто посилання на дані.
Таблиця буде тоненькою і довгою, зберігаючи лише необхідні дані, приблизно так:
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-адреси та звіти, які я б писав, також посилаються на дані. Тож я стурбований тим, що ця таблиця стане кошмаром запису та продуктивності з такою великою кількістю вводу-виводу.
Моє запитання
Це погана чи хороша ідея? Я розумію, що в SQL Server (2008 р2 Standard Edition BTW) кожна ситуація різна, і правило "інколи", але я дійсно просто шукаю загальну пораду.
Я почав розглянути можливість використання сервісного брокера, але виконую лише прості оновлення / вставки ( Дивіться альтернативу прийнятій відповіді ). Дані в багатьох випадках повинні бути в режимі реального часу, тому використання резервної бази даних насправді не спрацює. Продуктивність для нас вже є певною проблемою, але більшість із них стосується обладнання, яке буде вирішено незабаром.