Я выполняю краткосрочную контрактную работу для компании, которая пытается внедрить рабочий процесс типа «регистрация / возврат» для своих записей в базе данных.
Вот как это должно работать ...
- Пользователь создает новую сущность в приложении. Существует около 20 связанных таблиц, которые будут заполнены в дополнение к основной таблице сущностей.
- После создания объекта пользователь помечает его как мастер.
- Другой пользователь может вносить изменения в мастер только «проверяя» сущность. Несколько пользователей могут одновременно оформить заявку.
- После того, как пользователь внес все необходимые изменения в объект, он переводит его в состояние «требуется утверждение».
- После того, как авторизованный пользователь просмотрит объект, он может повысить его до мастер-уровня, который переведет исходную запись в захороненный статус.
Способ, которым они в настоящее время выполняют «извлечение», заключается в дублировании записей сущностей во всех таблицах. Первичные ключи включают EntityID + EntityDate, поэтому они дублируют записи объекта во всех связанных таблицах с тем же EntityID и обновленным EntityDate и придают ему статус «извлечено». Когда запись переводится в следующее состояние (требуется утверждение), дублирование происходит снова. В конечном итоге он будет повышен до мастер-класса, и в этот момент окончательная запись будет помечена как мастер, а исходный мастер помечен как мертвый.
Этот дизайн мне кажется отвратительным, но я понимаю, почему они это сделали. Когда кто-то ищет сущность из приложения, он должен видеть все текущие версии этой сущности. Это был очень простой способ сделать это. Но тот факт, что они представляют одну и ту же сущность несколько раз в одной и той же таблице (таблицах), меня не устраивает, равно как и тот факт, что они дублируют КАЖДЫЙ фрагмент данных, а не только хранят дельты.
Мне было бы интересно услышать вашу реакцию на дизайн, будь то положительный или отрицательный.
Буду также признателен за любые ресурсы, на которые вы можете мне указать, которые могут быть полезны для наблюдения за тем, как кто-то еще реализовал такой механизм.
Спасибо!
Darvis