Статус записи действительно хорошая идея.
Я предлагаю либо:
(a) приложение хранит удаленные объекты в массивах, и они фактически удаляются только тогда, когда ORM-подобный код вызывается для сохранения (то есть, когда он выполняет INSERTs, UPDATEs и DELETEs)
OR
(b) контекст ORM должен поддерживать внутренний закулисный список всех объектов, которые либо были ВЫБРАНЫ с диска, либо созданы в ОЗУ для каждой транзакции базы данных (или, если транзакции не используются, соединение). Этот список повторяется, когда ORM требуется сохранить, а INSERT, UPDATE и DELETE основаны на этом списке.
Во втором случае вы часто обнаруживаете дополнительное требование, чтобы иметь возможность отделить / отсоединить объект от ORM в некоторых частях системы, чтобы создать постоянный снимок состояния или измененную версию объекта, который (в соответствии с какой-либо моделью потока данных высокого уровня или другой) не предназначен для немедленного хранения, поэтому желательно, чтобы дополнительный бит или состояние перечисления отражали отсоединение. Возможно, вы захотите иметь возможность повторно связать / повторно присоединить объект с транзакцией ORM, но обратите внимание, что здесь могут быть проблемы с целостностью, которые, если они нуждаются в обработке, должны быть обработаны, а метод обработки их часто зависит от приложения.
Обратите внимание, что недавно созданные объекты, которые удаляются перед их первым сохранением, не должны генерировать SQL DELETE, поэтому на практике часто бывает недостаточно перечисления с UNMODIFED, NEW, CHANGED, DELETED, вам также нужен NEW_DELETED, и если вы придерживаетесь моих теорий ОТДЕЛИЛИ.