2012-03-23 12 views
5

estoy usando Symfony 2 con Doctrine como ORM Framework. Estoy buscando la mejor manera de guardar los cambios realizados en los campos de la base de datos. Tendré unas 100 tablas cada una con aproximadamente 50 campos y miles de filas. Ahora me gustaría guardar todos los cambios realizados en los campos.Guardar cambios en el campo de la base de datos: ¿prácticas recomendadas? Versiones, Loggable?

Posibilidades Pensé en: Extensión de Doctrine "Registrable" - guarda los cambios en una Tabla diferente, pero no sabe si puede permitirse esta cantidad de entradas.

a ¿Disparador MySQL para cada tabla que guarda los cambios en una nueva tabla?

Pero, ¿cuál es la mejor práctica para guardar los cambios?

Respuesta

5

Puede utilizar desencadenantes MySQL o la función DoctrineExtension Loggable mencionada. Ambos trabajos, ambos tienen inconvenientes y pros. El disparador de MySQL puede escribir en una tabla separada (ver mysql trigger FAQ).

desencadenantes:

  • ++ marco, independiente del lenguaje de programación
  • ++ funciona cuando se desea modificar los datos a mano o mediante un script.
  • - Debe escribir los desencadenantes para cada tabla o tiene que encontrar alguna solución genérica en SQL (no puedo evitarlo).
  • - Si usted no está familiarizado con los procedimientos almacenados y PL/SQL, bueno, hay aprendizaje curva

extensiones doctrina:

  • ++ Solamente ponga su anotación en clases y que' re hecho.
  • ++ Puede consultar el historial, revertir los cambios a través de la API Repositorio
  • - te encierras a un vendedor, esto es a veces, a veces no es un problema
  • - no funciona cuando se modificar los datos a mano o con scripts de un tercero.

Si la posibilidad de cambiar la doctrina a otra cosa es baja, comenzaría con extensiones de doctrina. Es una herramienta con el propósito exacto de ayudar a tratar con SQL después de todo.

0

Tal cosa se conoce comúnmente como "cambio de captura de datos". Se ha preguntado por con referencia a MySQL antes de SO:

Change Data Capture in MySQL

Quizás esta respuesta puede ayudar.

Distintos proveedores lo hacen una función incorporada en diversos grados.

+0

Trataré de mejorarlo. Ciertamente, la frase "cambiar captura de datos" lo vale solo, ya que el OP puede tomar eso y ejecutarlo. – duffymo

1

Sugiero ir con desencadenadores, especialmente si desea que su funcionalidad de registro permanezca independiente de la aplicación, es decir, funcionará incluso si decide reescribir su aplicación en un marco diferente o en un lenguaje de programación completamente diferente.

P.S. No sé qué tan bueno es el soporte de triggers en MySQL, ya que cambié a PostgreSQL incluso antes de que MySQL los tuviera.

Cuestiones relacionadas