я как раз примерно это и имел ввиду, на завершение транзакции создавать ещё одну запись. Вопрос только, какие потом запросы нужно к этим данным делать. Если во второй записи не будет дублирования данных из первой и надо будет по этому cancelled_at вытащить данные транзакции, то без джойнов по ключу transaction_id потом не обойтись.