stringtranslate.com

Persecución (algoritmo)

La persecución es un algoritmo simple de punto fijo que prueba y aplica la implicación de las dependencias de datos en los sistemas de bases de datos . Desempeña un papel importante tanto en la teoría de bases de datos como en la práctica. Lo utilizan, directa o indirectamente, a diario las personas que diseñan bases de datos, y se utiliza en sistemas comerciales para razonar sobre la coherencia y corrección de un diseño de datos. [ cita necesaria ] Todavía se están descubriendo nuevas aplicaciones de la 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 en una descomposición dada puede recuperarse volviendo a unir las proyecciones . Sea t una tupla donde R es una relación y F es un conjunto de dependencias funcionales (FD). Si las tuplas en R se representan como t 1 , ..., t k , la unión de las proyecciones de cada ti debe coincidir con t en donde i = 1, 2, ..., k . Si ti no está activado , el valor es desconocido.

La búsqueda se puede realizar dibujando un cuadro (que es el mismo formalismo utilizado en la consulta del cuadro). 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 Si , pero subíndice la letra con i si el componente no está en Si . Entonces, t i concordará con t si está en Si 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 }. Se puede determinar si esta descomposición no tiene pérdidas 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 de los atributos A y D no tienen índice y los de los atributos B y C tienen índice 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 utilizar la F dada para demostrar que t = ( a , b , c , d ) está realmente en R. Para hacerlo, el cuadro se puede seguir aplicando los FD en F para igualar los símbolos en el cuadro. Un cuadro 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 persecución, primero descomponga todos los FD en F de modo que cada FD tenga un único atributo en el lado derecho de la "flecha". (En este ejemplo, F permanece sin cambios porque todos sus FD ya tienen un único atributo en el lado derecho: F = { AB , BC , CDA }.)

Al equiparar dos símbolos, si uno de ellos no tiene índice, haga que el otro sea el mismo para que el cuadro final pueda tener una fila que sea exactamente igual a t = ( a , b , c , d ). Si ambos tienen su propio subíndice, cambie cualquiera para que sea el otro. Sin embargo, para evitar confusiones, se deben cambiar todas las apariciones.
Primero, aplique AB al cuadro. La primera fila es ( a , b 1 , c 1 , d ) donde a no tiene índice y b 1 tiene subíndice 1. Comparando la primera fila con la segunda, cambie b 2 por b 1 . Dado que la tercera fila tiene un 3 , b en la tercera fila permanece igual. El cuadro resultante es:

Entonces considere BC . Tanto la primera como la segunda fila tienen b 1 y observe que la segunda fila tiene un c sin suscripción . Por lo tanto, la primera fila cambia a ( a , b 1 , c , d ). Entonces el cuadro resultante es:

Ahora considere CDA . La primera fila tiene una cy una d sin suscripción , que es la misma que en la tercera fila. Esto significa que el valor A para las filas uno y tres también debe ser el mismo. Por lo tanto, cambie un 3 en la tercera fila por un . El cuadro resultante es:

En este punto, observe que la tercera fila es ( a , b , c , d ), que es lo mismo que t . Por lo tanto, este es el cuadro final para la prueba de persecución con R y F dados . Por lo tanto, siempre que R se proyecta sobre S 1 , S 2 y S 3 y se vuelve 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. Base de datos. Sistema. 4(3):297-314, 1979.
  2. ^ David Maier , Alberto O. Mendelzon y Yehoshua Sagiv : "Prueba de las implicaciones de las dependencias de datos". Transmisión ACM. Base de datos. Sistema. 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 persecución de limpieza y mapeo de Llunatic". 6 de abril de 2021.

Otras lecturas