Algebra y Calculo Relacional
-
Upload
miguel-enigmah -
Category
Documents
-
view
62 -
download
4
description
Transcript of Algebra y Calculo Relacional
Álgebra relacional y Cálculo relacional
Diseño de Base de DatosIng. Luis Reyes
Objetivos
El significado del término «completud relacional».
Cómo construir consultas en álgebra relacional.
Cómo construir consultas en el cálculo relacional de tuplas.
Cómo construir consultas en el cálculo relacional de dominios.
Las categorías de lenguajes de manipulación de datos relacionales (DML, Data Manipulation Language).
Introducción
El álgebra relacional y el cálculo relacional son lenguajes formales asociados al modelo relacional.
De manera informal el álgebra relacional es un lenguaje procedimental (de alto nivel) y el cálculo relacional un lenguaje no procedimental.
Sin embargo, formalmente, ambos lenguajes son equivalentes entre sí.
Álgebra relacional
Las operaciones de álgebra relacional se aplican a una o más relaciones para definir otra relación sin modificar las relaciones originales.
Tanto los operandos como los resultados son relaciones de manera que la salida de una operación puede utilizarse como entrada de otra.
Álgebra relacional
Existen cinco operaciones básicas en al álgebra relacional: selección, proyección, producto cartesiano, unión y diferencia de conjuntos.
Estas permiten realizar la mayoría de las operaciones de extracción de datos que nos interesan.
También existen la combinación, intersección y la división, que pueden expresarse en términos de las cinco operaciones básicas.
Operaciones de álgebra relacional
Selección Proyección Producto cartesiano
Diferencia de conjuntosIntersecciónUnión
Operaciones de álgebra relacional
Combinación natural
Semicombinación Combinación externa izquierda
División (área sombreada) Ejemplo de división
Selección (o Restricción)
predicate (R)
La operación de selección se aplica a una única relación R y define otra relación que contiene únicamente aquellas tuplas de R que satisfacen la condición (predicado) especificada.
Ejemplo - Selección (o Restricción)
Enumerar todos los miembros del personal cuyo salario sea superior a 10.000 euros.
salary > 10000 (Staff)
10
Proyección
col1, . . . , coln(R)
Se aplica a una única relación R y define otra relación que contiene un subconjunto vertical de R, extrayendo los valores de los atributos especificados y eliminando los duplicados.
© Pearson Education Limited 1995, 2005
Ejemplo - Proyección
Generar una lista de salarios para todo el personal, mostrando solamente los detalles referidos a los atributos staffNo, fName, lName, y salary.
staffNo, fName, lName, salary(Staff)
Unión
R S
La unión de dos relaciones R y S define una relación que contiene todas las tuplas de R, de S o tanto de R como de S, eliminándose las tuplas duplicadas.
R y S tienen que ser compatibles con respecto a la unión.
Ejemplo - Unión
Enumerar todas las ciudades en las que exista una sucursal, o un inmueble en alquiler.
city(Branch) city(PropertyForRent)
Diferencia de conjuntos
R – S
Define una relación compuesta por las tuplas que encuentran en la relación R pero no en S.
R y S deben ser compatibles con respecto a la unión.
Ejemplo – Diferencia de conjuntos
Enumerar todas las ciudades en las que exista una sucursal pero no haya inmuebles en alquiler.
city(Branch) – city(PropertyForRent)
Intersección
R S
Define una relación compuesta por el conjunto de todas las tuplas que existen tanto en R como en S.
R y S deben ser compatibles con respecto a la unión.
Expresándolo con operaciones básicas:
R S = R – (R – S)
Ejemplo - Intersección
Enumerar todas las ciudades en las que exista tanto una sucursal como al menos un inmueble en alquiler.
city(Branch) city(PropertyForRent)
18
Producto cartesiano
R X S
Define una relación que es la concatenación de cada tupla de la relación R con cada tupla de la relación S.
© Pearson Education Limited 1995, 2005
Ejemplo – Producto cartesiano
Enumerar los nombres y comentarios de todos los clientes que hayan visto un inmueble en alquiler.
(clientNo, fName, lName(Client)) X (clientNo, propertyNo,
comment (Viewing))
Operaciones de combinación
La combinación es una derivada del producto cartesiano.
Equivalente a realizar una operación de selección utilizando el predicado de combinación como fórmula se selección sobre el producto cartesiano de las dos relaciones que funcionan como operando.
Operaciones de combinación
Existen varias formas de operación de combinación
Combinación theta
Equicombinación (un tipo particular de combinación theta)
Combinación natural
Combinación externa
Semicombinación
Combinación Theta (-combinación)
R FS
Defina una relación que contiene tuplas del producto cartesiano que satisfacen el predicado F.
El predicado tiene la forma R.ai S.bi
donde puede ser uno de los operadores de comparación (<, , >, , =, ).
Combinación Theta (-combinación)
Puede ser reescrita en términos de las operaciones básicas de selección y producto cartesiano.
R FS = F(R S)
Ejemplo - Equicombinación
Enumerar los nombres y comentarios de todos los clientes que hayan visitado un inmueble en alquiler.
(clientNo, fName, lName(Client)) Client.clientNo
= Viewing.clientNo (clientNo, propertyNo,
comment(Viewing))
Combinación natural
R S
La combinación natural entre las dos relaciones R y S sobre todos los atributos comunes. De los resultados se elimina una de las dos apariciones de cada atributo común.
Ejemplo – Combinación natural
Enumerar los nombres y comentarios de
todos los clientes que hayan visitado un
inmueble en alquiler.
(clientNo, fName, lName(Client))
(clientNo, propertyNo, comment(Viewing))
Combinación externa
Se emplea para incluir en la relación resultante las tuplas que no tengan valores correspondientes en los atributos comunes de S.
R S
La combinación externa izquierda (natural) es aquella combinación que también incluye en el resultado las tuplas de R que no tienen valores correspondientes en los atributos comunes de S.
Ejemplo – Combinación externa izquierda
Generar un informe de estado sobre las visitas de los inmuebles.
propertyNo, street, city(PropertyForRent)
Viewing
29
Semicombinación
R F S
Define una relación que contiene las tuplas de R que participan en la combinación de R con S.
© Pearson Education Limited 1995, 2005
30
Ejemplo - Semicombinación
Enumerar los detalles completos de todos los empleados que trabajen en la sucursal de Glasgow.
Staff
Staff.branchNo=Branch.branchNo(city=‘Glasgow’(Branch))
© Pearson Education Limited 1995, 2005
31
División
R S
Define una relación sobre los atributos C que está compuesta por el conjunto de tuplas de R que se corresponden con la combinación de todas las tuplas de S.
© Pearson Education Limited 1995, 2005
Ejemplo - División
Identificar todos los clientes que hayan visto todos los inmuebles con tres habitaciones.
(clientNo, propertyNo(Viewing))
(propertyNo(rooms = 3 (PropertyForRent)))
Cálculo relacional
Las consultas de cálculo relacional especifican qué hay que extraer, en lugar de cómoextraerlo.
En la lógica de primer orden o cálculo de predicados, un predicado es una función booleana con argumentos.
Cuando asignamos valores a los argumentos la función nos proporciona una expresión, denominada proposición, que puede ser verdadera o falsa.
Cálculo relacional
Si el predicado contiene una variable (Ej. ‘xes miembro del personal’), tiene que existir un rango asociado para x.
Cuando sustituimos algunos de los valores de este rango por x, la proposición puede ser verdadera; para otros valores puede ser falsa.
Aplicado a las bases de datos se puede encontrar en dos formas: tuplas y dominios.
Cálculo relacional de tuplas
Lo que nos interesa es localizar las tuplas para las que un cierto predicado sea verdadero. Es un cálculo basado en el uso de variables de tuplas.
Una variable de tuplas es una variable que «tomasus valores» en una determinada relación: Ej. unavariable cuyos únicos valores permitidos son lastuplas de la relación.
Especificar el rango de una variable de tupla S de forma que el rango sea la relación Staff:
Staff(S)
Para extraer el conjunto de todas las tuplas Stales que F(S) sea verdadera:
{S | F(S)}
Cálculo relacional de tuplas - Ejemplo
Para obtener los detalles de todos losempleados que ganen más de 10.000euros:
{S | Staff(S) S.salary > 10000}
Para extraer un atributo concreto, comosalary, escribiríamos:
{S.salary | Staff(S) S.salary >10000}
Cálculo relacional de tuplas
Podemos usar dos cuantificadores para decir a cuántas instancias se aplica el predicado:
Cuantificador existencial Э («existe»)
Cuantificador universal ˅ («para todo»)
Las variables de tupla cualificadas mediante ˅ or Э se denominan variables legadas,
mientras que si no están cualificadas se denominan variables libres.
Cálculo relacional de tuplas
El cuantificador existencial se utiliza en fórmulas que deben ser ciertas para al menos una instancia, como en:
Staff(S) (ЭB)(Branch(B)
(B.branchNo = S.branchNo) B.city =‘London’)
Significa «Existe una tupla de Branch que tiene el mismo valor de branchNo que el valor de branchNo correspondiente a la tupla actual de Staff, S, y cuya ciudad correspondiente es Londres».
Cálculo relacional de tuplas
El cuantificador universal se utiliza enenunciados que deben ser ciertos paratodas las instancias, como en:
("B) (B.city ‘Paris’)
Significa «No existe ninguna sucursal enParís».
También podemos usar ~(ЭB) (B.city =‘Paris’) que significa «no existe ningunasucursal situada en París».
Ejemplo – Cálculo relacional de tuplas
Enumerar los nombres de todos los gerentes que ganen más de 25.000 euros.
{S.fName, S.lName | Staff(S)
S.position = ‘Manager’ S.salary > 25000}
Cálculo relacional de dominios
Utiliza variables que toman sus valores de dominios de atributos, en lugar de tomarlos de tuplas de alguna relación.
Si F(d1, d2, . . . , dn) representa una fórmula compuesta de átomos y d1, d2, . . . , dn representa variables de dominio, entonces:
{d1, d2, . . . , dn | F(d1, d2, . . . , dn)}
Es una expresión en el cálculo relacional de dominios.
42
Ejemplo – Cálculo relacional de dominios
Hallar los nombres de todos los gerentes que ganen más de 25.000 euros.
{fN, lN | (ЭsN, posn, sex, DOB, sal, bN)
(Staff (sN, fN, lN, posn, sex, DOB, sal, bN)
posn = ‘Manager’ sal > 25000)}
© Pearson Education Limited 1995, 2005
Ejemplo – Cálculo relacional de dominios
Enumerar los empleados que gestionan inmuebles en alquiler en Glasgow.
{sN, fN, lN, posn, sex, DOB, sal, bN |
(ЭsN1,cty)(Staff(sN,fN,lN,posn,sex,DOB,sal,bN)
PropertyForRent(pN, st, cty, pc, typ, rms,
rnt, oN, sN1, bN1)
(sN=sN1) cty=‘Glasgow’)}
Cálculo relacional de dominios
Cuando se restringe el cálculo relacional de dominios a expresiones seguras es equivalente al cálculo relacional de tuplas restringido también a expresiones segura, y ambos son a su vez equivalentes al álgebra relacional.
Esto quiere decir que toda expresión relacional tiene una expresión equivalente en el cálculo relacional y vice versa.
Otros lenguajes
Los lenguajes orientados a transformación son lenguajes no procedimentales que utilizan relaciones para transformar los datos de entrada en las salidas requeridas (Ej. SQL).
Los lenguajes gráficos proporcionan al usuario una imagen o ilustración de la estructura de la relación. El usuario rellena un ejemplo de lo que desea y el sistema devuelve los datos requeridos en dicho formato (Ej. QBE, Query-By-Example).
Otros lenguajes
Los lenguajes de cuarta generación (4GL, Fourth Generation Languages, permiten crear una aplicación personalizada completa utilizando un conjunto limitado de comandos en un entorno amigable y frecuentemente basado en menús.
Algunos sistemas aceptan algún tipo de lenguaje natural, que suele ser una versión restringida del inglés, lo que a veces se denomina lenguajes de quinta generación (5GL, Fifth Generation Languages). Estos desarrollos se encuentran todavía en una etapa temprana.