2009-04-15 17 views
7

This question contiene una excelente cobertura de cómo diseñar un historial de bases de datos/esquema de revisión para datos como números o campos de opción múltiple.Diseño de base de datos para revisiones de texto

Sin embargo, no hay mucha discusión de grandes campos de texto, tal como se encuentra a menudo en el blog/Q & Una sistemas de tipo/wiki/documentos.

Entonces, ¿qué se consideraría una buena práctica para almacenar el historial de un campo de texto en un sistema de edición basado en bases de datos? ¿Guardarlo en la base de datos es una buena idea?

+0

Supongo que desea insertar un enlace ("Esta pregunta contiene ...") así que edite su publicación e inclúyala. –

+0

Corrección de formato de enlace. – Cerebrus

Respuesta

4

Desarrollo un motor de wiki y las revisiones de página/artículo se almacenan en una tabla de base de datos. Cada revisión tiene un número de revisión secuencial, mientras que la revisión "actual" está marcada con -1 (solo para evitar NULO).

El texto de revisión se almacena como está, no se difiere o algo así.

Creo que el rendimiento no es un problema porque no es probable que acceda a revisiones antiguas con mucha frecuencia.

+0

He hecho lo mismo, hasta ahora funciona bien para mí. El sistema está aquí desde hace 2 años. –

1

A menudo, la forma más sensata de rastrear las versiones de un documento es realizar un seguimiento de los cambios realizados en él. Luego, si se solicita una versión particular, se puede reconstruir a partir del documento actual y el conjunto parcial de cambios.

Así que si tiene un buen método para describir los tipos de cambios en un documento (esto dependerá en gran medida de qué es el documento y cómo se usó), utilice una base de datos para seguir los cambios y, por lo tanto, las versiones .

+0

Almacenar solo las diferencias entre revisiones tiene la ventaja de ahorrar espacio, pero ralentiza el proceso de recuperación/reconstrucción de una revisión específica y también aumenta las posibilidades de corrupción de datos (¿y si se pierde una revisión?). –

+0

Sí, esos son puntos válidos. El enfoque óptimo está en algún punto intermedio, e imagino que sería bastante sensible a los datos tipo, creo. En el caso de que alguien corrija la ortografía de una palabra o dos, parece excesivo almacenar todo el documento nuevamente. – CurtainDog

+0

@Dario Acepto y elevé tu respuesta a esta pregunta, pero no estoy de acuerdo con tu comentario aquí. El miedo a "perder" los datos de su base de datos no es un buen razonamiento y ralentizar el proceso de recuperación de una revisión específica es un problema menor, como usted mismo señala, porque es probable que no tenga acceso a versiones anteriores con frecuencia. – Mocky

2

dado el estado actual del disco duro del arte, simplemente no vale la pena el esfuerzo de tratar de optimizar el texto mecanismos de almacenamiento: Document (ID, Name) y DocumentRevision (ID, DocumentID, Contents) tablas hará el trabajo. el ID en DocumentRevision también puede servir como un número de revisión de "repositorio". Si este no es el comportamiento que desea, asigne un VersionID por separado a cada revisión del documento.

Cuestiones relacionadas