Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Как лучше реализовать версионность данных  [new]
IvanMM
Guest
Нужно написать небольшое приложение, и вот пара таблиц из него.

[Document]
------------------
ID
DocName

DepartmentID


[Department]
------------------
ID
DptName


Требования такие, что если отдел меняет свое название, то документы, которые относились к нему, должны сохранить старое название. Ну и с фамилиями то же самое. То есть вновь создаваемые документы должны идти с актуальными названиями и фамилиями, а старые должны оставаться неизменными, не смотря ни на что. Изменения фамилий и названий отделов бывают достаточно редко, но все же бывают. Я на вскидку вижу два пути решения этой проблемы. Простое и правильное

1. Внести все потенциально изменчивые поля в таблицу [Document]. Таким образом, изменение таблицы [Department] уже не будет влиять на созданные документы. Достоинства – простота. Недостатки – избыточность и нарушение нормализации.

2. Создать в таблице [Department] (и во всех других, где нужно) версионность данных. При удалении – запись помечать удаленной. При модификации – добавлять новую версию, а старую помечать удаленной. При отображении удаленные записи фильтровать. Возможно, нужна будет ссылка в актуальной записи на предыдущую версию. Достоинства – минимальная избыточность. Недостатки – много вспомогательной логики.

У кого есть какие мнения? Может кто сталкивался с подобными задачами?
27 окт 05, 14:33    [2012650]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше реализовать версионность данных  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
недостаток второго способа в том что если попытаться распечатать архивный документ то будет новое название

если есть запрос история продаж по коду департамента то она оборвется

обычно добавляют пару полей актульно с и актуально по (дата-время)
и добавляют запись с тем же кодом департамета но новым названием
таблицу переименовывают как архив_департаменты создают запрос который выводит данные в формате предыдущей таблицы и ее именем (департаменты) чтобы не переписыват все приложение
27 окт 05, 14:44    [2012706]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше реализовать версионность данных  [new]
IvanMM
Guest
MsDatabaseru
недостаток второго способа в том что если попытаться распечатать архивный документ то будет новое название
Нового названия не будет. Старый документ по прежнему ссылается на первоначальную версию. Атрибут "удалено" в данном случае не рассматривается, и документ "не узнает", что появилась новая версия названия.

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

Я так понимаю, ты предлагаешь второй вариант? Почему? Что можешь сказать по первому?
27 окт 05, 15:00    [2012812]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше реализовать версионность данных  [new]
MsDatabaseru
Member

Откуда: Hobby.MsDatabase.ru
Сообщений: 10938
потому что :
1 избыточность данных (чт оне так страшно если нужно)
2 не будет вноситься каскадные обновления при исправлении ошибок и придется админу вручную или запросами отыскивать и править

например внесли:
Опщий атдел

напечатали пару документов и спохвалились - ошибка орфографии
исправили в справочнике, а админу придется пробежаться по всем документам и заменить ошибочное на новое

в таблицу можно добавлять поля, чего здесь необычного? запрос под старым именем таблицы будет отображать только актуальные данные по старой методике а к обновленной таблице напишешь новые запросы которые будут учитывать версиональность
27 окт 05, 15:23    [2012948]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше реализовать версионность данных  [new]
IvanMM
Guest
MsDatabaseru, спасибо за комментарии!

Может у кого-то еще есть мнения?
27 окт 05, 15:34    [2012996]     Ответить | Цитировать Сообщить модератору
 Re: Как лучше реализовать версионность данных  [new]
NevaMind
Guest
Если сходишь в "Проектирование", там найдешь много по этой теме - и больше комментариев.
27 окт 05, 15:42    [2013028]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить