MySQL удалить из таблицы или обновить столбец таблицы, чтобы пометить его как удаленный? - PullRequest
0 голосов
/ 28 февраля 2012

Детали проблемы.Давайте предположим, что у нас есть таблица InnoDB, и эта таблица содержит несколько записей.Мой вопрос: как бы вы реализовали операцию «удаление», имея в виду какую-то форму регистрации операций?Я процитировал «удалить», потому что есть некоторые разновидности:

  1. Операция удаления должна использовать DELETE FROM table_x WHERE....Это прекрасно работает с ограничениями внешних ключей.Но как можно отслеживать эту операцию?(под этим я подразумеваю некоторую форму операции регистрации базы данных).Если удаленные записи будут вставлены во вторичную базу данных или другая таблица в той же базе данных будет хорошей идеей?
  2. Другой идеей было бы иметь столбец, скажем, valid с возможными значениями 1 (дляactive / valid) и 0 (для удаленных записей).Операция «delete» просто устанавливает значение в этом столбце на 0, и бизнес-логика больше не учитывает это.Ведение журнала будет осуществляться в той же базе данных, сохраняя все записи.Этот подход должен будет интенсивно использовать триггеры для выполнения дополнительных задач, таких как обновление записей из другой таблицы на основе внешних ключей.

Не стесняйтесь добавлять дополнительные методы для выполнения этой задачи, если выесть они.Кроме того, если мы решим, что вариант 1) работает лучше всего, возможно ли в одной транзакции (запущенной из кода Java) выполнить DELETE FROM database1.table и INSERT into database2.table?(Честно говоря, я не пробовал это, но я не думаю, что это будет работать).Я просто не хочу в конечном итоге удалить строки из первой базы данных и пропущенные строки из второй.Если это невозможно, но, тем не менее, 1) лучший вариант - это "перемещение" данных из таблицы 1 в таблицу 2 путем удаления записей из таблицы 1 и вставки их в таблицу 2 в той же транзакции, что является хорошей практикой?

Пожалуйста, имейте в видуВстроенные проверки сервера MySQL, которые поддерживают целостность базы данных и тот факт, что решение должно будет решить проблему с журналированием, также при ответе на мой вопрос / предложить решение.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Я предпочитаю первый подход, он помогает вам с целочисленными ссылками и ..., вы можете обрабатывать его с помощью триггера на базовой таблице, так что все происходит в одной транзакции

0 голосов
/ 28 февраля 2012

Вообще, я думаю, что физическое исключение записи никогда не было хорошей идеей.

Лучше всего было бы исключить "логику", например, пометить запись как недействительную. На самом деле в «реальном мире» записи больших данных и важных баз данных никогда не удаляются. Я предпочитаю второй подход, потому что вы можете отслеживать все операции вашей базы данных.

...