У вас есть окно win 2003 с запущенным MSSQL 2005. Существует база данных, которая заполняется каждое утро новым / измененным SalesOrder, сделанным в предыдущий день. База данных имеет несколько таблиц: SalesOrder, SalesOrderItem, SalesOrderItemBom. Каждая из них имеет соответствующую таблицу Version (то есть SalesOrderVersion, SalesOrderItemVersion, SalesOrderItemBomVersion), которая имеет точно такие же поля, но с 2 дополнительными столбцами VersionStartDate, VersionEndDate. Не версионные таблицы содержат самые последние данные.
Также VersionStartDate является частью PK для таблиц версий, например, так: - SalesOrder имеет OrderID в качестве PK, а SalesOrderItem имеет VersionStartDate, OrderID в качестве PK.
Упрощенный пример работы таблицы версий:
SalesOrder
OrderID, сумма
1, 100
2, 200
SalesOrderVersion
VersionStartDate, OrderID, VersionEndDate, Amount
20090101 13:00:00, 1, 20090103 08:00:00, 50
20090103 08:00:00, 1, 99991231 00:00:00, 100
20090101 09:00:00, 2, 20090105 15:00:00, 300
20090105 15:00:00, 2, 99991231 00:00:00, 200
каждый раз, когда изменяется строка в SalesOrder, текущая строка VersionEndDate в SalesOrderVersion обновляется, и новая строка вставляется в SalesOrderVerion с VersionEndDate 99991231
Примечания. Если запись в SalesOrderItem была изменена, это не обязательно приведет к изменению «родительской» записи в SalesOrder
Было запрошено сделать отчет, показывающий тренд и ежедневный прирост продаж. Я думал о создании трех таблиц моментальных снимков для SalesOrder, SalesOrderItem, SalesOrderItemBom, которые собирают «последние данные» на текущий день и, таким образом, создают инкрементальные снимки для отображения тенденций. Помимо того, что требуется больше дискового пространства, есть ли у этого метода недостаток по сравнению с выполнением хранимой процедуры, которая соединяет таблицы версий, потому что это кажется длинным и дорогим запросом.
Есть мысли или рекомендации?