http://www.perlmonks.org?node_id=666574


in reply to ORM with version control?

Don't do this stuff in your ORM. Do that stuff in the database by using triggers. That way, you get the versioning even when you bypass the ORM (untested but taken from here):

CREATE TABLE foo ( $definitions ); CREATE TABLE foo_versions ( username VARCHAR(8) DEFAULT current_user(), timestamp DATETIME DEFAULT NOW(), action CHAR(1), -- IUD $definitions -- stores the values BEFORE the action ); CREATE TRIGGER foo_update BEFORE update ON foo FOR EACH ROW INSERT INTO foo_versions ('U',$columns); CREATE TRIGGER foo_delete BEFORE delete ON foo FOR EACH ROW INSERT INTO foo_versions ('D',$columns); CREATE TRIGGER foo_insert BEFORE update ON foo FOR EACH ROW INSERT INTO foo_versions ('I',$columns);

Of course, your versions table(s) will grow quickly, but as you'll only ever append to that table, you can truncate it at convenient times.