¿Cómo diseñar una database con Historial de revisiones?

Soy parte de un equipo que está creando un nuevo Sistema de gestión de contenido para nuestro sitio público. Estoy tratando de encontrar la forma más fácil y la mejor manera de incorporar un mecanismo de control de revisión. El model de objects es bastante básico. Tenemos una class abstracta de "BaseArticle" que incluye properties para la versión independiente / metadatos como "Heading" y "CreatedBy". Un número de classs henetworkinga de esto, como "DocumentArticle" que tiene la propiedad "URL" que será una ruta a un file. "WebArticle" también henetworkinga de "BaseArticle" e incluye la propiedad "FurtherInfo" y una colección de objects "Tabs", que incluyen "Body" que contendrá el HTML que se mostrará (los objects Tab no se derivan de nada). "NewsArticle" y "JobArticle" henetworkingan de "WebArticle". Tenemos otras classs derivadas, pero estas proporcionan suficiente de un ejemplo.

Proponemos dos aplicaciones para la persistencia del control de revisión. Yo los llamo "Approach1" y "Approach2". He usado SQL Server para hacer un diagtwig básico de cada uno: Diagrama de base de datos del enfoque 1Diagrama de base de datos del enfoque 2

Con Approach1, el plan consistiría en mantener versiones nuevas de los artículos a través de una actualización de la database. Se establecería un disparador para las actualizaciones e insertía los datos antiguos también en la tabla xxx_Versions. Creo que un disparador debería estar configurado en cada table. Este enfoque tiene la ventaja de que la única versión de "cabecera" de cada artículo se mantiene en las tablas principales, con versiones antiguas que se suspenden. Esto hace que sea fácil copyr las versiones principales de los artículos de la database de desarrollo / estadificación a Live.

Con Approach2, el plan sería insert nuevas versiones de los artículos en la database. La versión principal de los artículos se identificará a través de vistas. Esto parece tener la ventaja de tener less tablas y less código (por ejemplo, no activadores).

Tenga en count que con ambos enfoques, el plan sería llamar a un procedimiento almacenado Upsert para la tabla asignada al object relevante (debemos recordar manejar el caso de que se agregue un nuevo Artículo). Este procedimiento almacenado ascendente llamaría eso para la class de la que deriva, por ejemplo, upsert_NewsArticle llamaría upsert_WebArticle, etc.

Estamos usando SQL Server 2005, aunque creo que esta pregunta es independiente del sabor de la database. He realizado una extensa búsqueda de Internet y he encontrado references a ambos enfoques. Pero no he encontrado nada que compare los dos y muestra que uno u otro son mejores. Creo que con todos los libros de bases de datos en el mundo, esta elección de enfoques debe haber surgido antes.

Mi pregunta es: ¿cuál de estos enfoques es mejor y por qué?

Discutiría el Enfoque 2 . Es más simple, parece ser mucho más fácil de implementar y proporciona la misma funcionalidad que el Método 1.

¿Qué más puedo agregar?