CalculoRelacional

40
 Cálculo Relacional Bibliografía: Fundamentos de bases de datos Kor th , Sil ber schatz

description

ejemplo calculo relacional

Transcript of CalculoRelacional

  • Clculo Relacional

    Bibliografa: Fundamentos de bases de datos Korth , Silberschatz

  • Clculo Relacional de Tuplas

    Es un lenguaje de consulta no procedimental Describe la informacin deseada sin dar un

    procedimiento especfico para obtenerla.

    Una consulta en el CRT se expresa como

    {t / P(t)} es decir, el conjunto de todas las tuplas t, tal que el

    predicado P, es verdadero para t.

  • EjemplosDadas las relaciones r y s:

    la unin se expresa

    { t / r(t) s(t)}

    es decir, el conjunto de tuplas t tales que t est en r en s

  • EjemplosDadas las relaciones r y s:

    la diferencia se expresa

    r - s = { t / r(t) s(t) }

    es decir, el conj. de tuplas t tales que t esten r y no en s

  • EjemplosDadas las relaciones r y s:

    la proyeccin pipipipi i1,...ik ( r ) se expresa

    { t (k) / u (r(u) t[1]=u[i1] ... t[k]=u[ik]) }

    donde t (k) significa tuplas de grado k

  • Consultas de ejemplo Encontrar el nombre-sucursal, nmero-

    prstamo, nombre-cliente y cantidad para prstamos mayores de 1200 dlares.

    {t / t prstamo t[cantidad] >1200}

  • Encontrar los clientes que tienen un prstamo mayor de 1200 dlares.

    Si se desea nicamente el atributo nombre-cliente (y no todos), se necesita una expresin para una relacin sobre el

    esquema (nombre-cliente)

    Necesitamos aquellas tuplas en (nombre-cliente) tales que exista una tupla en prstamo correspondiente a ese nombre-cliente con el atributo cantidad > 1200

  • Para expresar esto necesitamos la construccin existe de la lgica matemtica.

    La notacin t r(Q (t))

    significa existe una tupla t en la relacin r tal que el predicado Q(t) es verdadero.

  • Usando esta notacin podemos escribir

    { t / sprstamo(t[nombre-cliente]=s[nombre-cliente] s[cantidad]>1200)}

    Esto se lee: el conjunto de todas las tuplas t tal que existe una tupla s en prstamo para la cual los valores de t y s para el atributo nombre-cliente son iguales y el valor de s para el atributo cantidad es mayor de 1200.

    t se define slo en el atributo nombre-cliente => el resultado es una relacin sobre (nombre-cliente).

  • Encontrar los clientes que tienen un prstamo en Perryridge y las ciudades en las que viven.

    Esta consulta involucra dos relaciones: cliente y prstamo Se requiere tener dos clusulas existe en la expresin

    conectadas por y ()

    { t / sprstamo( t[nombre-cliente] = s[nombre-cliente] s[nombre-sucursal]="Perryridge"

    u cliente (u[nombre-cliente] = s[nombre-cliente] t[ciudad-cliente] = u[ciudad-cliente]))}

  • Encontrar los clientes que tienen un prstamo, una cuenta o las dos, en la sucursal Perryridge.

    En lgebra relacional se usa la operacin unin.

    En clculo relacional de tuplas necesitaremos dos clusulas existe conectadas por o ()

  • Encontrar los clientes que tienen un prstamo, una cuenta o las dos, en la sucursal Perryridge.

    { t / s prstamo(t[nombre-cliente] = s[nombre-cliente] s[nombre-sucursal] = "Perryridge")

    u depsito (t [nombre-cliente] = u[nombre-cliente] u[nombre-sucursal] = "Perryridge")}

    Devuelve tuplas nombre-cliente que cumplen al menos que: nombre-cliente aparece en alguna tupla de prstamo con un

    prstamo en Perryridge nombre-cliente aparece en alguna tupla de depsito como

    depositante en Perryridge

  • Encontrar los clientes que tienen un prstamo, una cuenta o las dos, en la sucursal Perryridge.

    { t / s prstamo(t[nombre-cliente] = s[nombre-cliente] s[nombre-sucursal] = "Perryridge")

    u depsito (t [nombre-cliente] = u[nombre-cliente] u[nombre-sucursal] = "Perryridge")}

    El resultado de esta consulta es:

  • Encontrar nicamente aquellos clientes que tienen una cuenta y un prstamo en Perryridge.

    { t / s prstamo(t [nombre-cliente] = s [nombre-cliente] s [nombre-sucursal] = "Perryridge")

    u depsito (t [nombre-cliente] = u [nombre-cliente] u[nombre-sucursall = "Perryridge")}

    El resultado de esta consulta es:

  • Encontrar los clientes que tienen una cuenta en Perryridge pero no un prstamo en ella.

    { t / u depsito ( t[nombre-cliente]=u[nombre-cliente] u [nombre-sucursal] = "Perryridge

    s prstamo ( t[nombre-cliente]=s[nombre-cliente] s [nombre-sucursal] = "Perryridge" ))}

  • Encontrar los clientes que tienen una cuenta en Perryridge pero no un prstamo en ella.

    { t / u depsito ( t[nombre-cliente]=u[nombre-cliente] u [nombre-sucursal] = "Perryridge

    s prstamo ( t[nombre-cliente]=s[nombre-cliente] s [nombre-sucursal] = "Perryridge" ))}

    u depsito(... ): exige que el cliente tenga una cuenta en Perryridge, y

    s prstamo(... ): elimina los clientes que aparezcan en alguna tupla de prstamo por tener un prstamo de Perryridge.

  • Encontrar los clientes que tienen una cuenta en Perryridge pero no un prstamo en ella.

    { t / u depsito ( t[nombre-cliente]=u[nombre-cliente] u [nombre-sucursal] = "Perryridge

    s prstamo ( t[nombre-cliente]=s[nombre-cliente] s [nombre-sucursal] = "Perryridge" ))}

    El resultado de esta consulta es:

  • Encontrar los clientes que tienen una cuenta en todaslas sucursales situadas en Brooklyn.

    En AR se resuelve con la operacin divisin. En CRT se introducen: para todos ( ) e implicacin ( => ).

    P => Q significa si P es verdadera, entonces Q debe ser verdadera.

    t r(Q (t)) significa Q es verdadera para todas las tuplas t en la relacin r .

  • Encontrar los clientes que tienen una cuenta en todaslas sucursales situadas en Brooklyn.

    {t / u sucursal (u [ciudad-sucursal] = "Brooklyn" => s depsito (t [nombre-cliente] = s [nombre-cliente]

    u [nombre-sucursal] = s[nombre-sucursal]))}Es decir: el conjunto de todos los clientes (tuplas t (nombre-cliente)) tal que para todas las tuplas u en la relacin sucursal, si el valor de u en el atributo ciudad-sucursal es Brooklyn entonces el cliente tiene una cuenta en la sucursal cuyo nombre

    aparece en el atributo nombre-sucursal de u.

  • Definicin formal de CRTUna expresin del clculo relacional de tuplas es de la

    forma:

    {t / P(t)} donde t es una variable de tupla. P es una frmula construida a partir de tomos y

    operadores. En una frmula pueden aparecer varias variables de

    tuplas.

  • Definicin formal de CRTDefiniciones:

    Una variable de tupla es una variable libre si no estcuantificada por un o por un .

    Una variable de tupla cuantificada por un o por un , es una variable lmite acotada.

    Por ejemplo, en: t prstamo s cliente (t[nombre-cliente]=s[nombre-cliente])

    t es una variable libre. s es una variable lmite acotada.

  • Definicin formal de CRTUna frmula en el CRT se compone de tomos.

    Un tomo tiene una de las siguientes formas:

    s r

    s[x] u [y]

    s[x] c

  • Definicin formal de CRTUn tomo tiene una de las siguientes formas: s r donde s es una variable de tupla y r es una relacin s[x] u [y] donde:

    s y u son variables de tuplas, x es un atributo sobre el que s est definida, y es un atributo sobre el que u est definida, y es un operador de comparacin. ( = ). x e y deben tener dominios cuyos miembros puedan

    compararse. s[x] c donde:

    s es una variable de tupla, x es un atributo sobre el que s est definida, es un operador de comparacin, y c es una constante en el dominio del atributo x.

  • Definicin formal de CRTLas frmulas se construyen a partir de tomos usando

    las siguientes reglas:

    Un tomo es una frmula. Si P1 es una frmula, entonces tambin lo son

    P1 y (P1) Si P1 y P2 son frmulas, entonces tambin lo son

    P1 P2 , P1 P2 , y P1 => P2 Si P1(s) es una frmula que contiene una variable de

    tupla libre s, entonces tambin son s r (P1 (s) ) y s r (P1(s))

  • Definicin formal de CRTComo en el caso de AR es posible escribir

    expresiones equivalentes:

    En CRT estas equivalencias incluyen tres reglas:

    P1 P2 es equivalente a ( P1 P2) t r(P1(t)) es equivalente a t r( P1(t)) P1 => P2 es equivalente a P1 P2

  • Poder expresivo de los lenguajesEl CRT restringido a expresiones seguras es

    equivalente en poder expresivo al AR.

    Es decir:

    para cada expresin en el AR existe una expresin equivalente en el CRT

    y viceversa.

  • Definicin formal de Clculo Relacional de Dominios

    Usa variables de dominio que toman valores del dominio de un atributo.

    Una expresin en el CRD es de la forma

    {< x1,x2 , ... , n > | P(x1, x2 , ... , xn)}

    donde x1 , x2 , . . . , xn representan variables de dominio P es una frmula compuesta por tomos

  • Definicin formal de Clculo Relacional de Dominios

    Un tomo en el CRD tiene una de las formas siguientes: < x1 , x2 , . . . , xn > r ( r(x1 , x2 , . . . , xn )) donde

    r es una relacin en n atributos y x1 , x2 , . . . , xn son variables de dominio o ctes de dominio.

    x y donde x e y son variables de dominio es un operador de comparacin ( < , , >=). x e y tienen dominios que puedan compararse por medio de

    x c donde x es una variable de dominio, es un operador de comparacin c es una constante en el dominio del atributo correspondiente

  • Definicin formal de Clculo Relacional de Dominios

    Las frmulas se construyen a partir de tomos usando las reglas siguientes:

    Un tomo es una frmula. Si P1 es una frmula, entonces tambin lo son

    P1 y (P1) Si P1 y P2 son frmulas, entonces tambin lo son

    P1 v P2 , P1 P2 , y P1 => P2 Si P1(x) es una frmula en x, donde x es una variable de

    dominio, entonces tambin son frmulas x (P1 (x) ) y x (P1(x))

  • Consultas de ejemplo

    Encontrar nombre de sucursal, nmero de prstamo, nombre de cliente y cantidad de prstamos mayores de 1200 dlares.

    { / prstamo a>1200}

  • Encontrar los clientes que tienen un prstamo por una cantidad mayor de 1200 dlares.

    { / b,l,a ( prstamo a>1200)}

  • Encontrar clientes que tienen un prstamo de sucursal Perryridge y ciudad en que viven.

    { < c,x > / b,l,a ( prstamo b="Perryridge"

    y ( cliente ))}

  • Encontrar clientes que tienen un prstamo, una cuenta, o ambos en sucursal Perryridge.

    { / b,l,a (< b,l,c,a > prstamo b = "Perryridge"

    v b,a,n ( depsito b = "Perryridge")}

  • Encontrar clientes que tienen una cuenta en todas las sucursales situadas en Brooklyn:

    { / x,y,z (( sucursal) z = "Brooklyn => ( a,n ( depsito )))}

  • Poder expresivo de los lenguajes

    Son equivalentes:

    El lgebra relacional. El clculo relacional de tuplas. El clculo relacional de dominios.

  • Completitud relacional Un lenguaje es relacionalmente completo si es al

    menos tan expresivo como el lgebra, es decir si sus expresiones permiten la definicin de cualquier

    relacin que pueda definirse mediante expresiones del lgebra.

    Como el lgebra es relacionalmente completapara demostrar que cualquier lenguaje L es completobasta demostrar que L incluye anlogos de cada una de

    las cinco operaciones algebraicas primitivas: seleccin, proyeccin, producto cartesiano,

    unin y resta.

    SQL, QUEL, QBE son completos.

  • Comparacin de lenguajes algebraicos y de clculo

    Los lenguajes de clculo son de ms alto nivelque los algebraicos porque:

    lenguajes algebraicos especifican el orden de las operaciones

    lenguajes de clculo dejan que el compilador determine la manera (el orden) ms eficiente

  • EjemploDadas las relaciones R(A,B) y S(B,C)

    1 - la expresin algebraica:pi C A=a1( R |X| S ) significa

    listar los valores C asociados con el valor A=a1 en la relacin JOIN de columnas ABC

    esta expresin da un orden particular de operaciones1) join natural de r y s => ordena los valores B en ambas

    relaciones2) seleccin con A=a13) muestra los valores C asociados

  • 2 - La expresin algebraica 1 - es equivalente a

    pipipipiC (pipipipiB ( A=a1(R)) |X| S) para evaluar esta realiza:

    1) la seleccin en R de las tuplas con A= a1 2) encuentra los B asociados3) asocia las tuplas de S solamente para esos B4) muestra los valores C asociados

    3 - En el clculo de dominios: {c/ b (R(a1b) S(bc)}

    expresa lo que se quiere

  • Observaciones:

    1, 2 y 3 son equivalentes

    Dependiendo de la organizacin de R y S la opcin 1 puede llevar ms tiempo que 2.

    Optimizacin => convertir una expresin a una equivalente de menor costo