You can decide to activate the draft/published system on a per-model basis:
If you do so:
When you create a new record, it will be put into a Draft status. This means that the record is still not published: you can continue making changes and saving the record without having to worry about showing unfinished content to your end users.
Once you're satisfied with the changes, you can click on the Publish button: the latest revision of your record will be marked as the Published version, and it will be instantly available in the DatoCMS API.
On the Content Management API the calls by default fetch published record, you can get also the records in draft by specifying the version argument. More details on this documentation page.
The Content Delivery API instead has two different endpoints, one for published records and one for the latest version. Again more details on this documentation page.
If you make a change to a published record, its status will be become Updated. Again, those changes won't be visible to end users and published until you explicitly click on the Publish button again.
In case of linked records you can decide which behaviour to have when a record gets published. For example if all the linked records should be published as well or if you want to emit a validation error. Same goes with unpublishing and deleting.
In the field validation you can pick the option that you prefer:
To know more about how DatoCMS saves versions, check out this video tutorial: