Hay algunas formas de manejar esta situación:
- Puede usar un activador de base de datos. Esta no es una opción independiente de la base de datos y, hasta donde yo sé, el soporte RoR no existe. Si su situación no requiere absolutamente ninguna inconsistencia de datos, esta sería probablemente la forma más eficiente de lograr su objetivo, pero no un experto en bases de datos.
- Puede usar una operación por lotes para sincronizar las dos tablas periódicamente. Este método permite que sus dos tablas se separen y luego vuelve a sincronizar los datos de vez en cuando. Si su situación permite que ocurra esta desviación, esta puede ser una buena opción, ya que permite que la base de datos se actualice fuera del horario laboral. Si necesita hacer la sincronización cada 5 minutos, probablemente querrá buscar otras opciones. Esto puede ser manejado por su código Ruby, pero requerirá un ejecutor de trabajos en segundo plano de algún tipo (cron, delay_job, redis, etc.)
- Puede utilizar una devolución de llamada desde el interior de su modelo de Rails. Puede usar
"after_update :sync_denormalized_data"
. Esta devolución de llamada se incluirá en una transacción a nivel de base de datos (suponiendo que su base de datos admita transacciones). Tendrá código de nivel de Rails, datos consistentes y no necesitará un proceso en segundo plano a expensas de hacer dos escrituras cada vez. - Algún mecanismo en el que no he pensado....
Este tipo de problemas son muy específico de la aplicación. Incluso dentro de la misma aplicación, puede usar más de uno de los métodos según los requisitos de flexibilidad y rendimiento involucrados.