Детали проблемы.Давайте предположим, что у нас есть таблица InnoDB, и эта таблица содержит несколько записей.Мой вопрос: как бы вы реализовали операцию «удаление», имея в виду какую-то форму регистрации операций?Я процитировал «удалить», потому что есть некоторые разновидности:
- Операция удаления должна использовать
DELETE FROM table_x WHERE...
.Это прекрасно работает с ограничениями внешних ключей.Но как можно отслеживать эту операцию?(под этим я подразумеваю некоторую форму операции регистрации базы данных).Если удаленные записи будут вставлены во вторичную базу данных или другая таблица в той же базе данных будет хорошей идеей? - Другой идеей было бы иметь столбец, скажем,
valid
с возможными значениями 1 (дляactive / valid) и 0 (для удаленных записей).Операция «delete» просто устанавливает значение в этом столбце на 0, и бизнес-логика больше не учитывает это.Ведение журнала будет осуществляться в той же базе данных, сохраняя все записи.Этот подход должен будет интенсивно использовать триггеры для выполнения дополнительных задач, таких как обновление записей из другой таблицы на основе внешних ключей.
Не стесняйтесь добавлять дополнительные методы для выполнения этой задачи, если выесть они.Кроме того, если мы решим, что вариант 1) работает лучше всего, возможно ли в одной транзакции (запущенной из кода Java) выполнить DELETE FROM database1.table
и INSERT into database2.table
?(Честно говоря, я не пробовал это, но я не думаю, что это будет работать).Я просто не хочу в конечном итоге удалить строки из первой базы данных и пропущенные строки из второй.Если это невозможно, но, тем не менее, 1) лучший вариант - это "перемещение" данных из таблицы 1 в таблицу 2 путем удаления записей из таблицы 1 и вставки их в таблицу 2 в той же транзакции, что является хорошей практикой?
Пожалуйста, имейте в видуВстроенные проверки сервера MySQL, которые поддерживают целостность базы данных и тот факт, что решение должно будет решить проблему с журналированием, также при ответе на мой вопрос / предложить решение.