Eager versioning:
We immediately write the new version of the data to the address. But we have an undo log, that has a record of the previously committed data. So in a situation where we abort the ongoing transaction, we can undo the new version (change made by the transaction) with the previously committed one.
Lazy versioning:
We write our changes to a buffer and apply those changes on commit. This is lazy because we don't change data in the address until we commit. So no need for undo log.
Eager versioning: We immediately write the new version of the data to the address. But we have an undo log, that has a record of the previously committed data. So in a situation where we abort the ongoing transaction, we can undo the new version (change made by the transaction) with the previously committed one.
Lazy versioning: We write our changes to a buffer and apply those changes on commit. This is lazy because we don't change data in the address until we commit. So no need for undo log.