La mejor práctica en el control de versiones de loggings

Tengo una pregunta general. Me gustaría versionar los loggings de la tabla. Normalmente necesita recordar el producto y sus características (especialmente el precio). Comúnmente es el precio de ahorrar dentro del artículo de la order. Pero no es una buena solución. Básicamente, puede tener muchas más razones para recordar las características del logging de la tabla. Cuál es la mejor solución para recordar la versión de los loggings. Tengo dos ideas:

  1. Cada tabla tiene el nombre de tabla tableName_log y cada logging de guardado en tableName, guarda el origen en tableName_log, si se cambia el logging. El problema es con las foreign keys en tableName. Lo resolví creando datos de columna en tableName_log, donde está una matriz de objects de foreign keys codificadas en json. Es muy difícil de manejar.

  2. La key principal del logging está compuesta por ID y número de versión (dos columnas). Actual es la última versión. Las versiones antiguas son necesarias marcar por bandera (por ejemplo, activo = falso) para get todos los productos (solo las últimas versiones) de la tabla. Tiene algunos otros problemas.

¿Qué path es mejor o hay alguna otra forma de resolverlo de manera más efectiva?

Editar

Esa solución es algo entre mi primer y segundo ejemplo. Pero cuando en la tabla de la historia hay alguna ID (alguna key externa), almacenará solo esa ID, pero no todos los loggings pertenecen a esa ID. Realmente no es una mejor solución?