Hmm, yo también estaba pensando en esto.
- Personalmente, tener una tabla por tabla para mantener las revisiones no sería un gran problema para mí, pero oye.
- El nombre de usuario se puede mantener con variables definidas por el usuario, creo, (después de un inicio de sesión, emita algo como
SET @user='someone'y úsalo. - Siempre que haya disparadores después de INSERTAR, ACTUALIZAR y ELIMINAR, obtener los valores anterior/siguiente es una consulta simple, solo almacenaré los valores ANTIGUOS.
En resumen, para una tabla con columnas (a,b,c), crearía una tabla con columnas (user_id,modtime,a,b,c).
Principales inconvenientes:
- las actualizaciones por lotes son lentas (así que elija sus tablas para mantener las revisiones con cuidado)
- duplicación de datos de lujo, tendrás/tendré que tener suficiente espacio de almacenamiento
- los datos 'relacionados' no desencadenan una revisión (es decir, alterar un
group_membersla tabla realmente no altera ungroupstabla, aunque es posible que desee mantener eso como un punto en el tiempo paragroupsen lugar de profundizar engroup_membersalteraciones.
En general, me parece un buen negocio, pero como rara vez lo he visto en la práctica, debe habrá razones convincentes por las que es malo, así que esperaré esas respuestas.