Diseño de tabla, campo Versión.

07/10/2009 - 11:59 por L. Garcia | Informe spam
Hola a todos:

Me gustaría comentar/preguntar como realizar el diseño de una tabla para
diseñar la posibilidad de crear 'versiones' de la información, me explico
mejor:

Supongamos una tabla de información parecida a: GrupoId, ElementoId,
Información

Y me interesa que cuando alguien cambie algún registro, quede registrada la
fecha, el usuario, y el nº de versión automáticamente.

La primera aproximación sería añadir 3 campos: FechaModificacion,
UsuarioModificacion, Version.
Y cuando un usuario cambie un registro, automáticamente se actualicen los
campos, el campo Versión con Version+1.

También podría crearse una tabla 'backup' de la principal, e ir guardando
allí los registros 'antiguos', y el la tabla principal sólo estaría la
última versión.

¿Alguien a necesitado/diseñado algo parecido? Me gustaría compartir pros y
contras, gracias.

Saludos

PD: Perdón por el crossposting, pero al no ser de un tema concreto, lo he
escrito en los grupos en los que suelo participar.

Preguntas similare

Leer las respuestas

#6 Alberto Poblacion
08/10/2009 - 13:40 | Informe spam
"Carlos Sacristan" wrote in message
news:OOW1jJ$
Directamente no, pero por ejemplo en
http://weblogs.sqlteam.com/derekc/a...60469.aspx explican
una forma de obtenerlo (UPDATE #2)



Visto. Es una solución poco útil. Lo que hace es modificar la tabla
original y añadirle una columna "usuario", y obligar a que en todas las
operaciones de modificación se pase un valor para esa columna (y
lógicamente, entonces el CDC la captura). Se me ocurre que se podría forzar
la introducción del valor en este campo mediante un trigger sobre la tabla.
Pero puestos a usar un trigger, podríamos directamente usarlo para salvar en
una tabla paralela los datos deseados, y asi evitarnos tener que alterar el
esquema de la tabla original, además de poder prescindir del CDC (que es
costoso - requiere la versión Enterprise de Sql Server).
Respuesta Responder a este mensaje
#7 Carlos Sacristan
08/10/2009 - 13:59 | Informe spam
El problema, claro, es que "nativamente" no es posible capturar el usuario
que realizó la modificación, por lo que hay que buscarse soluciones
alternativas. La que muestra ese artículo es una de ellas.

CDC es una característica interesante y, como casi todas, sólo la edición
Enterprise lo ofrece. Si el presupuesto no da para una licencia de este
tipo, pues no hay más que hablar. Pero si se adapta a los requerimientos,
creo que es mejor opción que un trigger ya que, entre otras cosas, no afecta
al rendimiento de las operaciones realizadas sobre las tablas auditadas.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Alberto Poblacion" wrote
in message news:
"Carlos Sacristan" wrote in message
news:OOW1jJ$
Directamente no, pero por ejemplo en
http://weblogs.sqlteam.com/derekc/a...60469.aspx explican
una forma de obtenerlo (UPDATE #2)



Visto. Es una solución poco útil. Lo que hace es modificar la tabla
original y añadirle una columna "usuario", y obligar a que en todas las
operaciones de modificación se pase un valor para esa columna (y
lógicamente, entonces el CDC la captura). Se me ocurre que se podría
forzar la introducción del valor en este campo mediante un trigger sobre
la tabla. Pero puestos a usar un trigger, podríamos directamente usarlo
para salvar en una tabla paralela los datos deseados, y asi evitarnos
tener que alterar el esquema de la tabla original, además de poder
prescindir del CDC (que es costoso - requiere la versión Enterprise de
Sql Server).


Respuesta Responder a este mensaje
#8 L. Garcia
08/10/2009 - 15:44 | Informe spam
Hola:

Pues no, la versión es la 2005 :-(((

Bueno, alguna idea podré sacar, porque además de implementar los cambios,
también me interesa recuperar 'ágilmente las diferentes versiones generadas,
y por que usuario/fecha.

Saludos

"Carlos Sacristan" escribió en el mensaje
news:eXqFps%
¿Estamos hablando de SQL Server 2008? Porque en ese caso, lo tienes
bastante fácil de implementar con CDC:
http://msdn.microsoft.com/es-es/lib...22489.aspx

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"Saga" wrote in message
news:
He hecho algo parecido.

La forma mas generica es contar con una rutina que se manda llamar
cada vez que el usuario haga algun cambio. La rutina graba en una tabla
tabla de bitacora la accion que se realizo, las datos involucrados e
informacion administrativa, tal como la fecha y hora de la operacion,
identificacion del usuario que la hizo, nombre del modulo y aplicacion
que realizo el cambio y otros que veas util.

Claro, si la base de datos que estes usando soporta triggers, entonces
puedes usar este mecanismo. Saludos, Saga

"L. Garcia" wrote in message
news:
Hola a todos:

Me gustaría comentar/preguntar como realizar el diseño de una tabla para
diseñar la posibilidad de crear 'versiones' de la información, me
explico mejor:

Supongamos una tabla de información parecida a: GrupoId, ElementoId,
Información

Y me interesa que cuando alguien cambie algún registro, quede registrada
la fecha, el usuario, y el nº de versión automáticamente.

La primera aproximación sería añadir 3 campos: FechaModificacion,
UsuarioModificacion, Version.
Y cuando un usuario cambie un registro, automáticamente se actualicen
los campos, el campo Versión con Version+1.

También podría crearse una tabla 'backup' de la principal, e ir
guardando allí los registros 'antiguos', y el la tabla principal sólo
estaría la última versión.

¿Alguien a necesitado/diseñado algo parecido? Me gustaría compartir pros
y contras, gracias.

Saludos

PD: Perdón por el crossposting, pero al no ser de un tema concreto, lo
he escrito en los grupos en los que suelo participar.








email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida