Control de versiones de contenido

Recién comenzando un proyecto, me gustaría tener un pequeño administrador de contenido con control de versiones. Sin embargo, no sé cuál es la mejor manera de modelar la database.

Tengo una tabla de contenido que contiene los siguientes campos: identificación de la key primaria de serie, content_id int (campo para identificar diferentes contenidos), título de varchar, contenido de larga duración, versión int por defecto '1', date de creación de date,

He visto algunos CMS separa las revisiones en otra tabla que la revisión real, ¿Cuál es la mejor manera? ¿Hay alguna manera optimizada?

¡Gracias!

Diseñé algo como esto y aquí está lo esencial;

  1. Creo tabla espejo para cada tabla que quiero tener control de versión de nivel de fila. Digamos que tienes la tabla CLIENTE. La tabla de control de la versión espejo será VER_CUSTOMER
  2. Cada tabla que quiero tener control de versión de nivel de fila tiene una columna llamada RECORD_ID (GUID)
  3. Cuando un logging se inserta en esa tabla, genero un nuevo GUID y llene ese campo. También se insertó un nuevo logging en la tabla VER_CUSTOMER con RECORD_ID agregado a la PK natural de la tabla.
  4. Cuando el logging se actualiza, genero nuevo GUID nuevamente. Rellene RECORD_ID con este nuevo GUID. El logging actualizado también va a la tabla VER_CUSTOMER.
  5. Cuando se borra el logging, marco el logging en la tabla CUSTOMER como DELETED (no elimina físicamente el logging). Tengo la columna IS_DELETED en cada tabla. Establecí esa columna en TRUE cuando se intenta borrar el logging. De nuevo, la copy del logging eliminado también entra en la tabla VER_CUSTOMER.

Entonces, cada transacción que tiene en esa tabla, tiene un logging correspondiente en la tabla VER_CUSTOMER con RECORD_ID y la PK natural de la tabla como PK. Por ejemplo, si la PK del CLIENTE es CUST_ID. PK de VER_CUSTOMER será compuesto CUST_ID y RECORD_ID.

Espero que esto ayude…

Esto ya existe, sin una database:

  • gitit (escrito en Haskell, usa git o darcs como back-end)
  • ikiwiki (escrito en Perl, puede usar varios sistemas de control de versiones como back-end)

Ambos son de código abierto, y ambos tienen una architecture de complemento, por lo que se pueden personalizar para sus necesidades específicas. (Sin embargo, solo he usado gitit).

Sin embargo, me gustaría señalar que git no es perfecto para versionar files binarys grandes, y Darcs es terrible. Algo a tener en count.

    Intereting Posts