В настоящее время я разрабатываю приложение, которое в основном позволяет пользователям отправлять данные онлайн и сохранять их. Мы присваиваем данным уникальный идентификатор, чтобы впоследствии пользователь мог получать данные по идентификаторам, а также изменять или удалять данные. Но в большинстве случаев мы ожидаем, что пользователь будет просто отправлять новые данные (и мы назначаем новый идентификатор для новых данных). Нам необходимо отслеживать все исторические данные, поэтому, если пользователь изменяет / удаляет данные, мы никогда не изменяем / не удаляем исходные данные, а сохраняем новый снимок данных в текущих таблицах. Мы всегда получаем последний снимок данных (по уникальному идентификатору).
В настоящее время мы получаем последний снимок следующим образом - группируем данные по уникальному идентификатору и сортируем по первичному ключу db, а затем находим запись Max (первичный ключ db). Я думаю добавить флаг снимков к снимкам, чтобы указать, какой снимок активен, чтобы мы могли упростить запросы SQL. Но наш администратор БД сказал, что это плохо сказывается на производительности (или усложняет процесс), потому что это означает, что каждый раз, когда пользователь изменяет данные, нам требуется дополнительный шаг для деактивации текущего снимка, а операция обновления обходится дороже, чем поиск для базы данных. Но для меня запросы SQL для извлечения данных становятся слишком сложными, потому что у нас есть моментальные снимки для всего, поэтому нам нужно группировать моментальные снимки практически для любых данных, и это также подвержено ошибкам, когда мы пытаемся извлечь несколько типов представленных данных и данные связаны (мы должны быть очень осторожны с тем, где в sql получить последние снимки). Поэтому я хочу получить некоторые мнения по этому вопросу. Есть мнения или предложения? или, может быть, просто объясните мне, почему наличие флага статуса - плохая идея.