Нужно написать небольшое приложение, и вот пара таблиц из него.
[Document]
------------------
ID
DocName
…
DepartmentID
…
[Department]
------------------
ID
DptName
…
Требования такие, что если отдел меняет свое название, то документы, которые относились к нему, должны сохранить старое название. Ну и с фамилиями то же самое. То есть вновь создаваемые документы должны идти с актуальными названиями и фамилиями, а старые должны оставаться неизменными, не смотря ни на что. Изменения фамилий и названий отделов бывают достаточно редко, но все же бывают. Я на вскидку вижу два пути решения этой проблемы. Простое и правильное
1. Внести все потенциально изменчивые поля в таблицу [Document]. Таким образом, изменение таблицы [Department] уже не будет влиять на созданные документы. Достоинства – простота. Недостатки – избыточность и нарушение нормализации.
2. Создать в таблице [Department] (и во всех других, где нужно) версионность данных. При удалении – запись помечать удаленной. При модификации – добавлять новую версию, а старую помечать удаленной. При отображении удаленные записи фильтровать. Возможно, нужна будет ссылка в актуальной записи на предыдущую версию. Достоинства – минимальная избыточность. Недостатки – много вспомогательной логики.
У кого есть какие мнения? Может кто сталкивался с подобными задачами?
PS Приложение маленькое, поэтому база – MS Access 2000. Там нет ни триггеров, ни хранимых процедур.