03 Feb

  1. Con el fin de ir registrando los cambios que se dan en una base de datos, trabajaremos con las base de datos temporales de tiempo válido.

Planteado el esquema de base de datos del ejercicio, debemos de agregar 2 atributos, de tipo fecha (date), trabajaremos con la granularidad diaria.
Siendo la granularidad, el nivel de detalle en que se quiere almacenar la información en las bases de datos.

Estos atributos, se denominan y son los siguientes:

Tiv = Tiempo inicio válido    =  Vst
Valid start time  (otra forma de referenciarlos)

Tfv = Tiempo final válido     =  Vet
Valid end time   (    ”                     ”             )

Consideramos como granularidad de forma diaria, es la manera de determinar con qué frecuencia de tiempo se llevan a cabo las actualizaciones en la base de datos.

Para hacer mención al tiempo actual, nos referimos a él, mediante este valor especial denominado ‘now’ o ‘ahora’, en nuestro caso indicaremos con ‘ahora’.

  1. Respecto de la tabla original, se agregan los atributos necesarios para indicar las relaciones de tiempo válido, de allí que incorporamos los atributos Tiv (tiempo inicial válido) y Tfv (tiempo final válido), de manera de ir reflejando el historial de cambios en la tabla.

La versión actual de cada registro, está dado por el tiempo final válido Tfv que contiene ‘ahora’, es un valor especial que le asigna el sistema, aquellos otros registros donde en el Tfv contiene otro valor de tipo fecha, son las versiones históricas o cerradas de los registros.

Apellido

Dni

Sueldo

Cargo

Tiv

Tfv

Vidal

11122233

8000

10

01-06-2015

Ahora

Pruyas

22117789

10000

15

20-05-2016

Ahora

Reyes

32190784

9000

19

01-02-2016

30-06-2016

Siempre que se actualicen uno o más atributos de la base de datos, en lugar de sobrescribir los valores antiguos, el sistema crea una nueva versión de la tupla y cierra la versión actual cambiando su tiempo final válido Tfv = Tiv – 1 día (por la granularidad diaria).

  1. Al actualizar el sueldo a 12000 del empleado Vidal, debemos de representar, por un lado como se actualiza el Tfv para el registro que contiene el valor anterior del sueldo del empleado (versión histórica), y luego representaremos la versión actual del registro de Vidal con la modificación del atributo sueldo (se da de alta), indicando de qué forma se actualizan los tiempos válidos de inicio y final (Tiv-Tfv)
    .

Apellido

Dni

Sueldo

Cargo

Tiv

Tfv

Vidal

11122233

8000

10

01-06-2015

30-06-2016

Vidal

11122233

12000

10

01-07-2016

Ahora

El tiempo final válido, del registro con el valor anterior de sueldo, antes era ‘ahora’ y luego se actualiza con la fecha inmediata anterior a la fecha a partir de cuando entra en vigencia la modificación del sueldo solicitada. Al considerar la granularidad de forma diaria, debemos de restar 1 día a la fecha de la actualización, en este caso corresponde al último día del mes anterior (Junio).

El tiempo inicio válido del valor actual de sueldo, contiene la fecha a partir de cuanto entra en vigencia la actualización y en el tiempo final válido la variable del sistema dado por ‘ahora’, indicando que este registro, es la versión actual del empleado Vidal.

  1. Para el cambio del valor del atributo Cargo del empleado Pruyas, se producen las mismas modificaciones ya vistas en el punto anterior, el registro que contiene el valor anterior del cargo, en el tiempo final válido Tfv, se almacena la fecha hasta que estuvo vigente ese valor, y al ser la granularidad diaria, contiene la fecha inmediata anterior a la fecha de la modificación, que se debe hacer para el nuevo valor del cargo, esta es la versión histórica o cerrada del empleado.

Apellido

Dni

Sueldo

Cargo

Tiv

Tfv

Pruyas

22117789

10000

15

20-05-2016

29-05-2016

Pruyas

22117789

10000

20

30-05-2016

Ahora

Luego en el nuevo registro, se modifica el tiempo de inicio válido Tiv a la fecha de la actualización, dada por el ejercicio, y como tiempo final válido Tfv el valor ‘ahora’ que asigna el sistema, indicando de esta manera que este registro es la versión actual correspondiente al empleado Pruyas, quedando además como vimos anteriormente, almacenada la versión histórica del mismo.

  1. Dar de baja al empleado Pruyas a partir del 31-08-2016, actualmente en la tabla la versión existente es la siguiente:

Apellido

Dni

Sueldo

Cargo

Tiv

Tfv

Pruyas

22117789

10000

20

30-05-2016

Ahora

Al representar la baja de una tupla, lo único que debemos de realizar es el cierre del tiempo final válido Tfv de la versión actual antes vista, quedando de la siguiente manera indicada la eliminación del empleado Pruyas, siendo esta su versión histórica (la información se mantiene):

Apellido

Dni

Sueldo

Cargo

Tiv

Tfv

Pruyas

22117789

10000

20

30-05-2016

31-08-2016

  1. Dar de alta al empleado Méndez, considerando le fecha actual para el tiempo inicio válido (consideramos el día de la práctica en aula), y para el tiempo final válido es ‘ahora’, por lo que la versión actual de este registro, queda representado:

Apellido

Dni

Sueldo

Cargo

Tiv

Tfv

Méndez

32076123

9500

10

15-09-2016

Ahora

         La versión actualizada de la tabla, con los cambios solicitados será:

Apellido

Dni

Sueldo

Cargo

Tiv

Tfv

Vidal

11122233

8000

10

01-06-2015

30-06-2016

Vidal

11122233

12000

10

01-07-2016

Ahora

Pruyas

22117789

10000

15

20-05-2016

29-05-2016

Pruyas

22117789

10000

20

30-05-2016

31-08-2016

Reyes

32190784

9000

19

01-02-2016

30-06-2016

Méndez

32076123

9500

10

15-09-2016

Ahora

Como verán, están las versiones actuales de cada registro que tenga como Tfv ‘ahora’ y el resto son las versiones históricas o cerradas de los empleados.

Vimos que las relaciones de tiempo válida, mantienen la historia de los cambios a medida que se hacen efectivos en el mundo real, pero hay veces que las actualizaciones, inserciones y borrados pueden aplicarse de forma retroactiva o preventiva, para ello necesitamos contar con el registro del estado actual de la base de datos en un momento concreto, en ese caso acudimos a las relaciones de tiempo de transacción.

En una base de tiempo de transacción, siempre que se aplica una modificación, se registra la marca de tiempo actual de la transacción que aplicó el cambio, ya sea por una alta, eliminación o modificación.

En nuestro caso trabajaremos en forma conjunta, tanto con el tiempo válido como con el tiempo de transacción, de allí que nos conduce a las relaciones conocidas como bitemporales.

  1. Ahora en nuestra base de datos, además de los atributos de tiempo inicial válido Tiv y tiempo final válido, se agregan los atributos de tiempo de inicio y final de transacción:

Tit = Tiempo inicio transacción  =  Tst
Transaction start time  (otra forma de referenciarlos)

Tft = Tiempo final transacción   =  Tet
Transaction end time   (    ”                     ”           )

Difieren en el formato, ya que además de almacenar la fecha de la transacción, guardan la hora en formato hh:mm:ss, corresponde a los tipos estándar de almacenamiento de fechas en las bases de datos, como lo son: DATETIME o TIMESTAMP (dd-mm-aaaahh:mm:ss).

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Pérez

11122233

8000

15-06-2012

Ahora

08-06-2012 13:05:33

Uc

Campos

22117789

10000

20-08-1999

Ahora

20-08-1999 11:18:54

07-01-2001 14:33:25

Campos

22117789

10000

20-08-1999

31-01-2001

07-01-2001 14:33:25

Uc

Campos

22117789

15000

01-02-2001

Ahora

07-01-2001 14:33:25

Uc

Torres

36876321

9800

01-05-2010

Ahora

27-04-2010 16:22:17

Uc

Vemos que en las versiones actuales de cada registro, el tiempo final de transacción es  ‘uc´, que se corresponde con Until Change

“hasta que se cambie”, indica de esta manera que el registro representa la información correcta hasta que sea modificada por alguna otra transacción.

            Puntos a resolver:

  1. Actualizar el sueldo del empleado Pérez a 13500, que será efectivo a partir del día 01-06-2016, representar la modificación, siendo el tiempo de actualización de la transacción ´04-06-2016 10:30:46’ (marca de tiempo de la transacción).

La versión actual de Pérez, es aquella que tiene como Tfv = ahora y Tft = uc

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Pérez

11122233

8000

15-06-2012

Ahora

08-06-2012 13:05:33

Uc

Para actualizar el sueldo, tengamos en cuenta que:

  • El tiempo válido ahora es 01-06-2016.
  • La marca de tiempo de la transacción es 04-06-2016 10:30:46.
  • El nuevo sueldo corresponde a 13500.

Se llevan a cabo las siguientes operaciones:

Paso 1

Se crea una tupla, que es una copia de la tupla actual, excepto porque debemos de actualizar el tiempo final válido Tfv (como lo realizábamos en el ejercicio 4), a partir del tiempo válido dado, se almacenara la fecha inmediata anterior, de acuerdo a la granularidad diaria.

Y en el tiempo de inicio transacción Tit, se guarda la marca de tiempo de transacción.

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Pérez

11122233

8000

15-06-2012

Ahora

08-06-2012 13:05:33

Uc

Pérez

11122233

8000

15-06-2012

31-05-2016

04-06-2016 10:30:46

Uc

Paso 2

Considerando los cambios del paso 1, ahora se vuelve a crear otra copia de la tupla actual, excepto porque debemos de actualizar el tiempo inicio válido Tiv, el atributo sueldo y el tiempo inicio transacción Tit.

Luego en la versión que antes era la actual, debemos de actualizar el tiempo final transacción Tft con la marca de tiempo de transacción dada.

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Pérez

11122233

8000

15-06-2012

Ahora

08-06-2012 13:05:33

04-06-2016 10:30:46

Pérez

11122233

8000

15-06-2012

31-05-2016

04-06-2016 10:30:46

Uc

Pérez

11122233

13500

01-06-2016

Ahora

04-06-2016 10:30:46

Uc

Los cambios que efectuamos fueron:

Paso 1:

  • Creamos una tupla copia de la versión actual del empleado Pérez
  • Tfv = 31-05-2016  un día menos al tiempo válido del ejercicio
  • Tit  = 04-06-2016 10:30:46

Paso 2:

  • Creamos otra tupla copia de la versión actual del empleado Pérez.

  • Sueldo = 13500
  • Tiv = 01-06-2016  es el tiempo válido del ejercicio
  • Tit  = 04-06-2016 10:30:46
  • En la versión actual del registro, del cual se hicieron las otras 2 copias  de Pérez, se debe cerrar el tiempo final transacción Tft = 04-06-2016 10:30:46.
  • La versión actual del empleado Pérez será:

Pérez

11122233

13500

01-06-2016

Ahora

04-06-2016 10:30:46

Uc

  1. Eliminar el empleado Torres, que deja de prestar servicios el día 30-09-2016, siendo el tiempo de actualización de la transacción ´15-09-2016 12:25:31’.

Esta es la versión actual del empleado:

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Torres

36876321

9800

01-05-2010

Ahora

27-04-2010 16:22:17

Uc

Para llevar adelante la operación de borrado, se crea una copia de la versión actual y se actualizará lo siguiente:

  • En la versión actual, el tiempo final transacción Tft = 15-09-2016 12:25:31
  • En la versión final del empleado Torres, se actualiza el tiempo final válido Tfv = 30-09-2016, fecha a partir del cual entra en vigencia la baja

Y el tiempo inicio transacción Tit =
15-09-2016 12:25:31

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Torres

36876321

9800

01-05-2010

Ahora

27-04-2010 16:22:17

15-09-2016 12:25:31

Torres

36876321

9800

01-05-2010

30-09-2016

15-09-2016 12:25:31

Uc

  1. Insertar el siguiente empleado, que comienza a prestar servicios desde el día de la fecha (considerar la fecha actual para Tiv), siendo la marca de tiempo de actualización de la transacción también la fecha actual y hora actual (expresada con el formato dd-mm-aaaahh-mm-ss).

Para completar con una operación de inserción, consideremos para el tiempo válido inicial Tiv =
14-09-2017 y la marca de tiempo de la transacción, corresponde al mismo día y consideremos la hora de desarrollo del práctico como ejemplo, tiempo inicio transacción Tit = 14-09-2017 21:22:37.

Ya que este va a ser la versión actual del empleado Ríos, en los tiempos finales válido y de transacción, corresponde ‘ahora’ y ‘uc’.

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Ríos

24785930

11200

14-09-2017

Ahora

14-09-2017 21:22:37

Uc

La versión final de esta base de datos bitemporal, con la modificación del sueldo de Pérez, la baja del empleado Torres y el alta del empleado Ríos (el empleado Campos no sufríó cambio alguno), corresponde a:

Apellido

Dni

Sueldo

Tiv (Vst)


Tfv (Vet)


Tit (Tst)


Tft (Tet)


Pérez

11122233

8000

15-06-2012

Ahora

08-06-2012 13:05:33

04-06-2016 10:30:46

Pérez

11122233

8000

15-06-2012

31-05-2016

04-06-2016 10:30:46

Uc

Pérez

11122233

13500

01-06-2016

Ahora

04-06-2016 10:30:46

Uc

Campos

22117789

10000

20-08-1999

Ahora

20-08-1999 11:18:54

07-01-2001 14:33:25

Campos

22117789

10000

20-08-1999

31-01-2001

07-01-2001 14:33:25

Uc

Campos

22117789

15000

01-02-2001

Ahora

07-01-2001 14:33:25

Uc

Torres

36876321

9800

01-05-2010

Ahora

27-04-2010 16:22:17

15-09-2016 12:25:31

Torres

36876321

9800

01-05-2010

30-09-2016

15-09-2016 12:25:31

Uc

Ríos

24785930

11200

14-09-2017

Ahora

14-09-2017 21:22:37

Uc

Con las bases de datos bitemporales, nos permiten llevar un registro completo de los cambios.

Deja un comentario