Great question and something you need to be familiar. Let me try to answer you.
- Yes, when deploying, you'll create a deployment package, which is send to the cloud repository. From this repository you will deploy it to the acceptance/production environment. So when deploying Build B, then Build A is still available and reverting is deploying A again.
- On a nightly basis a back up is created, so yes this can be used to go back. Also recommended, before deploying build B, create a manual back up.
- This is the tricky part. Since the Mendix model contains the Domain model as well, which is in control of the underlying database. So if Build A and Build B have the same domain model; You can keep the database with data entered when using Build B, while reverting back to Build A. However, when there are domain model changes, then there will be impact.
- When domain model in Build B is extended and reverting back to Build A, all additions to the domain model will be deleted from the database → thus data loss if containing data
- When domain model B has items removed compared to A → When deploying A, columns and tables will be added but empty
Additionally, a nightly backup of the database will have a reference to the used build/model package. So when restoring the a backup, the related model can be restored as well.
Note: above behavior of backup schedule etc is when using the Mendix cloud. When running on your own servers, backups and model repositories are in your own control and responsibility
Hope this shed some light on your questions