Executando verificação de segurança...
1

Meu comentário não responde suas perguntas, mas passa uma visão de uma implementação que já fiz e que talvez possa ser útil para você.

Nessa implementação, considerei que todas as tabelas do sistema poderiam ser auditadas, ou seja, não seria legal criar relacionamento entre tabela de auditoria e demais. Para tal, minha tabela de auditoria possuía um campo do tipo varchar que receberia a tabela auditada, o registro antigo em formato json, o registro atualizado em formato json e uma leitura humana.

Ficando mais ou menos assim:

Tabela auditoria:

IdTabelaRegistroAntigoRegistroNovoLeituraHumanaCriadoEm
1Cars{"id": 133, "modelo": "gol", "ano": 2010}{"id": 133, "modelo": "gol", "ano": 2023}Campo "ano" alterado de "2010" para "2023"2022-03-04 22:33:00
Carregando publicação patrocinada...
1