Неразрушающие обновления, управление финансовыми данными в SQL Server 2008 - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть три стола (на самом деле это много, но мне нужно сейчас побеспокоиться об этих трех)

Таблица линейки продуктов, например ...

ProductLineId (pk)
Name
Description
Price
Finance Event (FK)

и таблица финансовых событий, например ...

EventId (pk)
Event Description

и таблица финансовых транзакций, например ...

TransactionId (pk)
FinanceEventId (fk)
LotsOfSageReferencesAndOtherForeignKeys

Когда продажа обрабатывается, она создает записи транзакций на основе Финансовых событий и т. Д.

Вопрос в том; если кто-то из администраторов затем входит и изменяет событие Finance, что является лучшим способом создания версий таблицы событий при сохранении первичного ключа.

1 Ответ

2 голосов
/ 03 апреля 2012

В целом у вас есть несколько вариантов:

Во-первых, при работе с временными данными вы должны хранить фактические значения, а не только идентификаторы в таблице транзакций. Затем другие таблицы служат в качестве справочных таблиц для создания новых записей, но вы всегда знаете, какими были реальные данные во время транзакций. Это может включать в себя вещи, которые меняются со временем, такие как цена, имя клиента и т. Д. Обратите внимание, что вы можете Также необходимо сохранить поле идентификатора на тот случай, если вам нужно посмотреть, что является текущим эквивалентом.

Или вы можете полностью запретить обновления в таблицах поиска и с помощью триггера деактивировать текущую запись и вставить новую, когда кто-то запускает оператор обновления. Теперь ваши дочерние таблицы содержат значения записи, которая была активной во время ее создания. В этом сценарии вы теряете способность искать текущую стоимость (поэтому вы можете не захотеть делать это по имени клиента или по цене).

Для данных, которые могут вас не волновать, если они изменились с течением времени, но хотели бы отразить текущую информацию, разрешить обновления, но иметь таблицу аудита или истории, поддерживаемую с помощью триггеров; так что вы можете при необходимости воссоздать то, что было бы в то время, или посмотреть, кто что изменил и когда (иногда законное требование).

Какой из этих вариантов подходит вашей текущей ситуации, знает только вы.

...