next up previous
Siguiente: Lenses y slicing Subir: Transformaciones bidireccionales en slicing Anterior: Introducci'on

Lenses

El problema de la actualizaci'on de vistas es bien conocido en el contexto de las bases de datos relacionales: Un modelo concreto se abstrae en uno abstracto de modo que las modificaciones realizadas al modelo abstracto se propagan al concreto. El modelo abstracto en este contexto se denomina vista y el concreto es la implementaci'on de la base de datos. Gr'aficamente, el problema se puede representar del siguiente modo:


\begin{displaymath}
\xymatrix{
V \ar[r]^u & V' \\
D \ar[u]^q \ar[r]_t & D' \ar[u]_q
}
\end{displaymath} (1)

$q$ es la consulta que se realiza sobre la base de datos para generar la vista, y $u$ es la actualizaci'on sobre la vista $V$ que genera la vista modificada $V'$. El problema consiste en determinar la transformaci'on $t$ sobre la base de datos $D$ que refleje $u$ generando $D'$. Claramente, aplicando $q$ directamente sobre $D'$ se debe obtener la misma vista $V'$ obtenida mediante la aplicaci'on de $u$. En otros t'erminos, y de manera m'as general, el problema consiste en sincronizar actualizaciones en niveles distintos.
En [#!Focal2005-long!#], se propone una soluci'on alternativa a este problema. Aqu'i, la idea es modelar la sincronizaci'on (tambi'en llamada lens), mediante la definici'on de dos funciones: $get$ (forward transformation) y $create$ (backward transformation). Intuitivamente, mediante $get$ se consigue un componente abstracto a partir de otro concreto m'as grande. $create$ por su parte, inserta en la estructura concreta (sin actualizar, por esto tambi'en llamada antigua u original), el componente abstracto.
Esta situaci'on se puede representar mediante la siguiente inecuaci'on


\begin{displaymath}
\xymatrix{
C \ar@/^1pc/[rr]^{get} & \geq & \ar@/^1pc/[ll]^{create} A
}
\end{displaymath} (2)

que expresa el hecho que el modelo abstracto $A$ disponde de menos informaci'on que el modelo concreto $C$. Adem'as, indica que la funci'on $get$ es parcial y sobreyectiva, en tanto que $create$ es total e inyectiva, y se verifica la propiedad de validaci'on


\begin{displaymath}
\forall a \in A. get(create \ a) = a
\end{displaymath} (3)

Sin embargo, de [*] resulta evidente que al disponer de menos informaci'on el modelo abstracto, la reconstrucci'on del modelo concreto a partir de aquel ser'ia limitada. Por lo tanto, es necesario modelar otra transformaci'on que disponga de la informaci'on suficiente para reconstruir el modelo concreto. As'i, modificamos [*] como sigue


\begin{displaymath}
\xymatrix{
C \ar@/^1pc/[rr]^{get} & \geq & \ar@/^1pc/[ll]^{c...
...
& A \times C \ar@/^1pc/[lu]^{put} \ar@/_1pc/[ru]_{\pi_1} &
}
\end{displaymath} (4)

Ahora, como transformaci'on inversa tenemos dos alternativas: $create$ y $put$. Sin embargo, solo esta 'ultima puede reconstruir el modelo original actualizado.


next up previous
Siguiente: Lenses y slicing Subir: Transformaciones bidireccionales en slicing Anterior: Introducci'on
Gustavo E. Villavicencio 2012-06-19