they should probably do it with a new table that has a relationship (aggregated?)
This is the bit I don’t like, what keys would you use? id, page title, longtitle, date aggregated together? If you can do this then you have a UUID already. its just a large composite key rather than being a generated UUID.
I’d use two databases for versioning, the main site one that keeps say the last two copies of a resource, after this they are shipped across to a history database and if needed you would have a retrieve/show from history command. You now have an audit trail as well and data separation, the history database can be backed up etc. separately.
Why have all that data in the main resource table?
Not sure what you mean here, what data? The only data you would have is two extra columns, a UUID and a rev, say max 512 bytes per resource. You don’t store the revs in the site content table, for any particular resource at any time you only need to know its UUID and current rev, these are the ’aggregate keys’ you mention above and are unique everywhere. You can have as many local(or remote) tables indexed by this as you want.
An example, say you create a resource, it would be stamped with UUID1r1, ship it another database, create 3 more copies locally UUID1r2, UUID1r3 and UUID1r4 in a temp table indexed by UUID. You could now say ’I want to use revision 3’ on the remote db find the resource by UUID, check its revision, its UUID1r1, so update it to UUID1r3. There’s no doubt here that its the same resource. It doesn’t matter what its MYSQL id is. You could also do this the other way if you wish