Как вести историю изменений сущностей в системе?
В таблицу где лежит информация о сущности добавьте поле DBEG as datetime.
При создании сущности в это поле заносите текущую дату/время. При изменении сущности - не меняете запись сущности, а добавляете новую запись с текущим значением даты/времени в DBEG. Отбор текущей сущности будет происходить так:
select top 1 * from table where ID= order by DBEG desc
Таким образом сохраняется вся история, ну и не плохо бы иметь интерфейс для просмотра истории.
Это общий подход. Если нужно реализовать хранение изменений для определенных аттрибутов сущности, то подобные аттрибуты нужно выделить в отдельную таблицу и в этой таблице применить аналогичный подход, при этом сама сущность будет в единственном экземпляре, а вот ее некоторые аттрибуты будут с историей.
Аттрибуты можно выделять в таблицу по типам данных, допустим отдельная таблица для целых, строк, вещественных, дат и т.п. Либо одна общая таблица с соответствующими полями для каждого типа данных.
> Тупо создается таблица для истории изменений
Лучше умно :)
Зависит что именно вы хотите сделать, т.е. какие бизнестребования.
Вариант 1: 
нужно просто иметь лог о том что изменилось. В этом случае, вы можете просто при любом изменении писать лог:
кто изменил, когда, что изменилось, старое значение, новое.
Вариант 2:
вам нужно в любой момент иметь возможность откатить до указанного состояния (как вики, например).
Тогда делаете п1 и добавляете функционал работы с логами.
Но самое прстое - просто сделать лог.