У меня есть таблица, которая отслеживает данные инвентаря по каждой отдельной части. Это упрощенная версия таблицы (исключены некоторые неключевые поля):
UniqueID,
ProductSKU,
SerialNumber,
OnHandStatus,
Cost,
DateTimeStamp
Каждый раз, когда что-то случается с данным фрагментом, создается новая запись аудита. Например, когда мой продукт ABC впервые добавляется в инвентарь, я получаю следующую запись:
1, ABC, 555, OnHand, $500, 01/01/2009 @ 02:05:22
Если стоимость серийного номера ABC 555 изменяется, я получаю новую запись:
2, ABC, 555, OnHand, $600, 01/02/2009 @ 04:25:11
Если произведение продано, я получаю еще одну запись:
3, ABC, 555, Sold, $600, 02/01/2009 @ 5:55:55
Если новый кусок ABC принесен, я получаю эту запись:
4, ABC, 888, OnHand, $600, 02/05/2009 @ 9:01:01
Мне нужно иметь возможность быстро получить доступную инвентарную стоимость для данного набора продуктов в любой момент времени .
Используя мой пример выше, если бы я хотел получить свою инвентарную стоимость для продукта ABC по состоянию на 01.02.2009, мне нужно было бы выбрать для каждой уникальной комбинации Product / SerialNumber одну самую последнюю запись до по 01/03/2009 со статусом «OnHand», а затем складываются расходы. (Я не уверен на 100%, как будет выглядеть этот оператор select, но я собираюсь немного поэкспериментировать).
Мои вопросы: это хорошая структура для типа таблицы аудита, которую я описываю? То есть, пригоден ли он для быстрых запросов при соответствующей индексации? (Я пытаюсь представить, что произойдет, когда эта таблица увеличится до миллионов строк.)
Стоит ли разбивать исторические записи в отдельную таблицу и оставлять только самую последнюю запись для каждой комбинации ProductID / SerialNumber в "активной" таблице?
Любые отзывы / предложения / комментарии / ссылки приветствуются.
Спасибо!