Delphi - Crear historia de cambios en una tabla

 
Vista:

Crear historia de cambios en una tabla

Publicado por Santiago (1 intervención) el 28/04/2006 20:29:25
Hola a todos:
Quisiera tener la historia de los cambios hechos sobre una tabla t1
donde solo pueden variar 2 campos (c1 y c2) por ejemplo:

create table t1 (idt int IDENTITY(1,1) PRIMARY KEY,nt varchar(50),c1
int,c2 int)

lo primero que se me ocurre es crear otra tabla t1s con la sgte extructura:

create table t1s (idt int, c1 int, c2 int, fecha smalldatetime
default getdate())

y en la tabla t1 programarle un trigger

CREATE TRIGGER cambia ON [dbo].[t1]
FOR update
AS
if update(c1) or update(c2)
insert into t1s
select idt,c1,c2 from deleted

ahora si quisiera saber el estado de la tabla t1 hasta la actualidad basta

select * from t1

pero si quisiera saber el estado hace una semana ¿ cómo sería ?

o alguien tiene una mejor idea ?

en este caso se me ocurre si hago mas de un cambio en un articulo el
mismo día no se como resolverlo pues entonces me aparecerian en t1s
los dos el mismo día y en el caso de que borre el artículo que hacer
crear otra tabla para los articulos borrados ?
En fin agradeceria cualquier ayuda
Santiago

Trabajo SQL Server 2000
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Crear historia de cambios en una tabla

Publicado por kikecg (33 intervenciones) el 08/05/2006 13:39:44
Hola.
No se si esto te puede ayudar. Yo lo que haría es tener la tabla con el histórico, con el mismo formato de la original, mas campo de fecha y campo de hora. Con eso resuelves el que se haga mas de un cambio en el mismo día, ya que la hora te determinará el orden de esos cambios.

El problema de los elementos eliminados... pues es el de siempre. Mas que borrar los elementos, lo que puedes hacer es tener un campo de tipo boolean, por ejemplo, que indique si ese artículo está activo o no. En el caso de querer eliminarlo, le pones el campo a falso, y al hacer el query en el que muestras los articulos, le pones que activo sea = a True. Por ejemplo. O con 0 - 1 haces lo mismo. Lo lógico en una base de datos relacional es que no se eliminen registros si están relacionados en otras tablas, en cuyo caso tendrías que eliminar en cascada todos los registros relacionados. Al menos en el sector de mi empresa esa eliminación es absolutamente impensable.

En fin son ideas...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar