Articulo de referencia

Persecución (algoritmo)

El algoritmo de persecución es un método sencillo de punto fijo que prueba y verifica las implicaciones de las dependencias de datos en los sistemas de bases de datos . Desempeñ...

El algoritmo de persecución es un método sencillo de punto fijo que prueba y verifica las implicaciones de las dependencias de datos en los sistemas de bases de datos . Desempeña un papel fundamental tanto en la teoría como en la práctica de las bases de datos. Quienes diseñan bases de datos lo utilizan a diario, directa o indirectamente, y en sistemas comerciales se emplea para analizar la coherencia y la corrección del diseño de datos. Aún se están descubriendo nuevas aplicaciones del algoritmo de persecución en la gestión de metadatos y el intercambio de datos.

La persecución tiene su origen en dos artículos fundamentales de 1979, uno de Alfred V. Aho , Catriel Beeri y Jeffrey D. Ullman [ 1 ] y el otro de David Maier , Alberto O. Mendelzon y Yehoshua Sagiv . [ 2 ]

En su aplicación más simple, la persecución se utiliza para probar si la proyección de un esquema de relación restringido por algunas dependencias funcionales sobre una descomposición dada se puede recuperar volviendo a unir las proyecciones . Sea t una tupla enπS1(R)πS2(R)...πSk(R){\displaystyle \pi _{S_{1}}(R)\bowtie \pi _{S_{2}}(R)\bowtie ...\bowtie \pi _{S_{k}}(R)}donde R es una relación y F es un conjunto de dependencias funcionales (DF). Si las tuplas en R se representan como t 1 , ..., t k , la unión de las proyecciones de cada t i debe coincidir con t enπSi(R){\displaystyle \pi _{S_{i}}(R)}donde i = 1, 2, ..., k . Si t i no está enπSi(R){\displaystyle \pi _{S_{i}}(R)}, el valor es desconocido.

La búsqueda se puede realizar dibujando un tableau (que es el mismo formalismo que se usa en la consulta de tableau ). Supongamos que R tiene atributos A, B, ... y los componentes de t son a, b, ... . Para t i, use la misma letra que t en los componentes que están en S i, pero agregue un subíndice a la letra con i si el componente no está en S i . Entonces, t i coincidirá con t si está en S i y tendrá un valor único en caso contrario.

El proceso de persecución es confluente . Existen implementaciones del algoritmo de persecución, [ 3 ] algunas de ellas también son de código abierto. [ 4 ]

Ejemplo

Sea R ( A , B , C , D ) un esquema de relación que se sabe que obedece al conjunto de dependencias funcionales F = { AB , BC , CD→A }. Supongamos que R se descompone en tres esquemas de relación S 1 = { A , D }, S 2 = { A , C } y S 3 = { B , C , D }. Determinar si esta descomposición es sin pérdida se puede hacer realizando una búsqueda como se muestra a continuación.

El cuadro inicial para esta descomposición es:

La primera fila representa S 1 . Los componentes para los atributos A y D no tienen subíndice y los de los atributos B y C tienen subíndice con i = 1. La segunda y tercera filas se rellenan de la misma manera con S 2 y S 3 respectivamente.

El objetivo de esta prueba es usar la matriz F dada para demostrar que t = ( a , b , c , d ) pertenece realmente a R. Para ello, se puede realizar una prueba de seguimiento aplicando las dependencias funcionales (DF) de F para igualar los símbolos de la matriz. Una matriz final con una fila igual a t implica que cualquier tupla t en la unión de las proyecciones es en realidad una tupla de R. Para realizar la prueba de seguimiento, primero se descomponen todas las DF de F de modo que cada DF tenga un único atributo en el lado derecho de la "flecha". (En este ejemplo, F permanece sin cambios porque todas sus DF ya tienen un único atributo en el lado derecho: F = { AB , BC , CDA }).

Al igualar dos símbolos, si uno de ellos no tiene subíndice, el otro debe tener el mismo para que la tabla final tenga una fila idéntica a t = ( a , b , c , d ). Si ambos tienen su propio subíndice, se debe cambiar uno por el otro. Sin embargo, para evitar confusiones, se deben cambiar todas las ocurrencias. Primero, se aplica AB a la tabla. La primera fila es ( a , b1 , c1 , d ), donde a no tiene subíndice y b1 tiene el subíndice 1. Comparando la primera fila con la segunda, se cambia b2 por b1 . Como la tercera fila tiene a3 , b en la tercera fila permanece igual. La tabla resultante es:

Consideremos entonces BC. Tanto la primera como la segunda fila tienen b 1 y observemos que la segunda fila tiene una c sin subíndice . Por lo tanto, la primera fila cambia a ( a , b 1 , c , d ). Entonces, el tableau resultante es:

Ahora consideremos CDA. La primera fila tiene una c sin subíndice y una d sin subíndice , que es la misma que en la tercera fila. Esto significa que el valor de A para la primera y la tercera fila también debe ser el mismo. Por lo tanto, cambiamos un 3 en la tercera fila por un 3. El tableau resultante es:

En este punto, observe que la tercera fila es ( a , b , c , d ), que es la misma que t . Por lo tanto, este es el tableau final para la prueba de persecución con R y F dados . En consecuencia, siempre que R se proyecte sobre S1 , S2 y S3 y se vuelva a unir, el resultado está en R. En particular, la tupla resultante es la misma que la tupla de R que se proyecta sobre { B , C , D }.

Referencias

  1. Alfred V. Aho , Catriel Beeri y Jeffrey D. Ullman : "La teoría de las uniones en bases de datos relacionales", ACM Trans. Datab. Syst. 4(3):297-314, 1979.
  2. David Maier , Alberto O. Mendelzon y Yehoshua Sagiv : "Pruebas de implicaciones de las dependencias de datos". ACM Trans. Datab. Syst. 4(4):455-469, 1979.
  3. Michael Benedikt , George Konstantinidis , Giansalvatore Mecca , Boris Motik , Paolo Papotti , Donatello Santoro , Efthymia Tsamoura : Evaluación comparativa de la Caza . En Proc. de PODS, 2017.
  4. "El motor de búsqueda de mapeo y limpieza de Llunatic" . 6 de abril de 2021.

Lecturas adicionales

  • Sergio Greco; Francesca Spezzano; Cristian Molinaro (2012). Datos incompletos y dependencias de datos en bases de datos relacionales . Morgan & Claypool Publishers. ISBN 978-1-60845-926-1.