Look at abstracting 'facts' at the record layer

This way all of the respective logic for other records can be hidden
away as common sets of functions such as save, update and delete.