Я работаю над проектом, в котором нам нужно, чтобы данные, введенные или обновленные некоторыми пользователями, проходили через ожидающий статус перед добавлением в «живые данные».
При подготовке данных пользователь может сохранять неполные записи. Пока данные находятся в состоянии ожидания, мы не хотим, чтобы данные влияли на правила, налагаемые на пользователей, редактирующих живые данные, например, пользователь, работающий с оперативными данными, не должен сталкиваться с уникальными ограничениями при вводе тех же данных, которые уже находятся в состоянии ожидания.
Я предполагаю, что наборы обновлений данных будут сгруппированы в «представление данных», и данные будут повторно проверены и исправлены / отклонены / утверждены, когда кто-то будет контролировать качество представления.
Я думал о двух сценариях, касающихся хранения данных:
1) Сохранение ожидающих данных о состоянии в той же таблице, что и текущие данные, но добавление флага для указания его статуса. Я мог видеть здесь проблемы с необходимостью удаления ограничений или обнуления обязательных полей для поддержки «неполных» данных статуса. Тогда возникает проблема с обработкой обновления существующих данных, вам нужно будет добавить новую строку для обновления и связать ее с существующей «живой» строкой. Это кажется мне немного грязным.
2) Добавьте новые таблицы, которые отражают действующие таблицы, и сохраняйте там данные до тех пор, пока они не будут утверждены. Это позволило бы мне сохранить полный контроль над существующими живыми таблицами, в то время как над «ожидающими» таблицами можно злоупотреблять тем, что, по мнению пользователя, он хочет поместить туда. Недостатком этого является то, что я получу много дополнительных таблиц / SP в БД. Еще одна проблема, о которой я думал, заключалась в том, как пользователь мог связать две записи, при этом связанная запись могла бы быть записью в оперативной таблице или записью в таблице ожидания, но я полагаю, что в этой ситуации вы всегда можете взять копию связанную запись и рассматривать ее как обновление?
Ни одно из решений не кажется идеальным, но второе мне кажется лучшим вариантом - есть ли третье решение?