Event sourcing — вместо хранения текущего состояния, хранишь последовательность событий. Состояние — результат проигрывания всех событий с начала.
// вместо UPDATE accounts SET balance = 900
// храним события:
AccountCreated{ID: 1, Balance: 1000}
MoneyWithdrawn{ID: 1, Amount: 100}
// текущий баланс = replay всех событий = 900
Плюсы: полная история изменений (аудит бесплатно), можно "перемотать" состояние на любой момент, легко строить разные read-модели из одних событий, идеально для debug.
Минусы: сложность реализации, нет простого SELECT для текущего состояния (нужны snapshot-ы), eventual consistency, миграция схемы событий — боль.
Event sourcing отлично сочетается с CQRS: события записываются в event store, проекции (read models) строятся асинхронно. Используется в финтехе, бухгалтерии, системах с жёсткими требованиями к аудиту. Для типового CRUD — стрелять из пушки по воробьям.