¿Qué patrón de diseño de versiones recomendaría

Tengo el requisito de construir 'versiones' en una aplicación y me preguntaba cuál es la mejor manera de abordarla.

Tengo este patrón general:

Modelo A tiene muchas B's

En el momento de la actualización, los atributos de A deben versionarse y sus objetos asociados (B) también deben versionarse. Por lo tanto, la aplicación mostrará la versión actual de A, pero también debe ser posible ver versiones anteriores de A y sus objetos asociados.

Me gustaría usar un almacén de documentos, sin embargo, esto es solo una parte de la aplicación y tener un almacén de documentos y una base de datos de relaciones introduciría más complejidad.

He considerado usar un esquema de estrella, pero antes de progresar, me preguntaba si hay un patrón de diseño flotando para abordar este problema.

Esta pregunta está orientada a resolver el problema de almacenar las versiones de un objeto asociado en una base de datos relacional. Donde existe una necesidad inherente de poder consultar efectivamente los datos (es decir, el objeto de serialización no será suficiente).

Update: Lo que estaba pensando / he implementado pero quiero ver si es "una mejor manera"

,---------. 1      * ,--------.
| Model A |----------| Model B|
`---------'          `--------'
|PK       |          | a_id   |
|b_version|          |version |
|version  |          `--------'
`---------'

Donde estaría duplicando el modelo A y todos los B asociados e incrementando el atributo de versión. Luego, haga una selección para unirse a las B a través de b_version y b.version. Solo me pregunto si esto se puede hacer mejor.

Respuestas a la pregunta(5)

Su respuesta a la pregunta