A computer implemented method, comprising: in response to a first transaction being started, opening a transaction workspace view of a live workspace of a parent database at a first time, the parent database comprising a number of database records and the opening of the transaction workspace view instantiating a snapshot of the live workspace of the parent database; creating a data structure, the data structure arranged to include any changes from further transactions which are committed to the parent database while the first transaction is open; within the first transaction, making a first change within the transaction workspace view to data relating to a first record of the parent database; attempting to commit the first change in the parent database at a second time that is later than the first time, wherein attempting to commit the first change comprises: recursively searching the data structure to identify further transactions having acted on the first record, and for any further records acted upon by the further transactions, identifying any still further transactions having acted upon the further records, until no further transactions are found; refreshing the transaction workspace view of the first transaction with the changes to the records acted upon by the further transactions identified in the recursive search; resolving any conflicts between the first change and the changes to the records acted upon by the further transactions based on the refreshed transaction workspace view; and committing the first change in dependence on any resolved conflicts. in response to a first transaction being started, opening a transaction workspace view of a live workspace of a parent database at a first time, the parent database comprising a number of database records and the opening of the transaction workspace view instantiating a snapshot of the live workspace of the parent database; creating a data structure, the data structure arranged to include any changes from further transactions which are committed to the parent database while the first transaction is open; within the first transaction, making a first change within the transaction workspace view to data relating to a first record of the parent database; attempting to commit the first change in the parent database at a second time that is later than the first time, wherein attempting to commit the first change comprises: recursively searching the data structure to identify further transactions having acted on the first record, and for any further records acted upon by the further transactions, identifying any still further transactions having acted upon the further records, until no further transactions are found; refreshing the transaction workspace view of the first transaction with the changes to the records acted upon by the further transactions identified in the recursive search; resolving any conflicts between the first change and the changes to the records acted upon by the further transactions based on the refreshed transaction workspace view; and committing the first change in dependence on any resolved conflicts. recursively searching the data structure to identify further transactions having acted on the first record, and for any further records acted upon by the further transactions, identifying any still further transactions having acted upon the further records, until no further transactions are found; refreshing the transaction workspace view of the first transaction with the changes to the records acted upon by the further transactions identified in the recursive search; resolving any conflicts between the first change and the changes to the records acted upon by the further transactions based on the refreshed transaction workspace view; and committing the first change in dependence on any resolved conflicts.