2.2. Algebra relacional.
El Algebra relacional es un lenguaje de consulta procedural. Consta de un conjunto de operaciones que toman como entrada una o dos relaciones y producen como resultado una nueva relación, por lo tanto, es posible anidar y combinar operadores. Hay ocho operadores en el álgebra relacional que construyen relaciones y manipulan datos, estos son:
Tabla 2-1 - Operadores del Algebra relacional Las operaciones de proyección, producto, unión, diferencia, y selección son llamadas primitivas, puesto que las otras tres se pueden definir en términos de estas. Se hace necesario en este punto incluir un modelo de datos de ejemplo en el cual trabajar para generar ejemplos de comandos y operadores. Para este efecto se incluye un modelo básico de administración de RadioTaxis. El Gráfico que se presenta a continuación representa el Modelo conceptual (Modelo Lógico) o Diagrama de Entidad-Relación | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Los Esquemas de relaciones que se pueden construir a partir de este modelo son los siguientes:
Dueño = {rut, nombre, teléfono, dirección, vigencia}
Chofer = {rut, nombre, teléfono, dirección, fecha_licencia_desde, fecha_licencia_hasta, vigencia}
Vale = {correlativo, hora_desde, hora_hasta, metraje_total, tarifa_total}
Móvil = {patente, rut_dueño, rut_chofer, marca, modelo, año}
Viaje = {correlativo_vale, patente_movil, Hora_Desde, hora_hasta, origen, destino, tarifa, metraje}
2.2.1. Selección.
El operador de selección opta por tuplas que satisfagan cierto predicado, se utiliza la letra griega sigma minúscula (σ) para señalar la selección. El predicado aparece como subíndice de σ. La Relación que constituye el argumento se da entre paréntesis después de la σ.
Ejemplos : 2.2.2. Proyección.
La operación de proyección permite quitar ciertos atributos de la relación, esta operación es unaria, copiando su relación base dada como argumento y quitando ciertas columnas, La proyección se señala con la letra griega pi mayúscula (Π). Como subíndice de Π se coloca una lista de todos los atributos que se desea aparezcan en el resultado. La relación argumento se escribe después de Π entre paréntesis.
Ejemplos : 2.2.3. Producto.
En álgebra relacional el producto de dos relaciones A y B es:
A Veces B o A X B Produce el conjunto de todas las tuplas t tales que t es el encadenamiento de una tupla aperteneciente a A y de una b que pertenece a B. se utiliza el símbolo X para representar el producto. Ejemplos: 2.2.4. Unión.
En álgebra relacional la unión de dos relaciones compatibles[3]A y B es:
A UNION B o A ∪ B Produce el conjunto de todas las tuplas que pertenecen ya sea a A o a B o a Ambas. Al igual que en teoría de conjuntos el símbolo ∪ representa aquí la unión de dos relaciones. Ejemplo : Devuelve todos los Dueños y los Choferes. 2.2.5. Intersección.
En álgebra relacional la intersección de dos relaciones compatibles A y B
A INTERSECCION B o A ∩ B Produce el conjunto de todas las tuplas pertenecientes a A y B. Al igual que en teoría de conjuntos el símbolo ∩ representa aquí la intersección entre dos relaciones. Ejemplo: Devuelve todos los dueños que también son choferes 2.2.6. Diferencia
En álgebra relacional la diferencia entre dos relaciones compatibles A y B
A MENOS B o A – B Produce el conjunto de todas las tuplas t que pertenecen a A y no pertenecen a B. Ejemplo: Devuelve todos los dueños que NO son choferes 2.2.7. Join o Reunión.
En álgebra relacional el JOIN entre el atributo X de la relación A con el atributo Y de la relación B produce el conjunto de todas las tuplas t tal que t es el encadenamiento de una tupla a perteneciente a A y una tupla b perteneciente a B que cumplen con el predicado “A.X comp B.Y es verdadero” (siendo comp un operador relacional y los atributos A.X y B.Y pertenecientes al mismo dominio). Si el operador relacional “comp” es “=” entonces el conjunto resultante es un EQUI-JOIN. Si se quita uno de éstos (usando una proyección) entonces el resultado es un JOIN-NATURAL.
Ejemplo : 2.2.8. División
En álgebra relacional el operador de división divide la relación A con grado m + n por la relación B entregando como resultado una relación con grado m. El atributo m + i de A y el atributo i de B deben estar definidos dentro del mismo dominio. Así el resultado de
A DIVIDIDO POR B o A / B produce la relación C con un sólo atributo X, tal que cada valor de x de C.X aparece como un valor de A.X, y el par de valores (x, y) aparece en A para todos los valores y que aparecen en B.
Ejemplo:
Selecciona todos los autos a cuyos choferes les caduca la licencia el 01/01/1999 http://www.jorgesanchez.net/bd/ejerciciosAR/algebra1.pdf
Ejercicios de álgebra relacional (1)
Tenemos el siguiente esquema relacional de base de datos:
CLIENTES(Nº Cliente, Nombre, Dirección, Teléfono, Población)
PRODUCTO(Cod Producto, Descripción, Precio)
VENTA(Cod Producto, Nº Cliente, Cantidad, Id Venta)
La tabla de clientes almacena información sobre cada posible cliente
de nuestra empresa.
En la tabla de productos almacenamos información sobre cada
producto de la empresa.
La tabla de ventas relaciona a las dos anteriores utilizando el atributo
cod Producto para indicar el producto que se venda, y el atributo Nº
Cliente para indicar el cliente al que vendimos el producto.
Sobre ella se realizan estos ejercicios (las soluciones están al final):
[1] Realizar una consulta que muestre el nombre de los
clientes de Palencia
[2] Indicar el código y descripción de los productos cuyo
código coincida con su descripción
[3] Obtener el nombre de los clientes junto con el
identificador de venta y la cantidad vendida, de aquellos
productos de los que se vendieron más de 500 unidades
[4] Nombre de los clientes de la tabla Clientes que no
aparecen en la tabla de ventas (Clientes que no han
comprado nada)
[5] Nombre de los clientes que han comprado todos los
productos de la empresa
[6] Identificador de las ventas cuya cantidad supera a la
cantidad vendida en la venta número 18
[7] Productos que no se han comprado nunca en Palencia
[8] Productos que se han vendido tanto en Palencia como en
Valladolid [9] Poblaciones a las que hemos vendido todos nuestros
productos
Imaginemos que añadimos la tabla de facturas que se relaciona con
la de ventas, de modo que a la tabla de ventas le añadimos el nº de
Factura con la que se relaciona. En la tabla de factura indicamos la
fecha, el número y si se pago o no (un 1 significa pagado, un 0 que
no está pagada). Cada factura se corresponde con varias ventas y
con un solo cliente, para lo cual se varía el diseño:
FACTURA(Nº Factura, Fecha, Pagada, Nº Cliente)
VENTA(Cod Producto, Nº Factura, Cantidad, Id Venta)
[10] Obtener el nombre de los clientes que tienen alguna
factura sin pagar
[11] Clientes que han pagado todas sus facturas
Soluciones
Lo primero es renombrar las tablas para facilitar su manejo en las
consultas:
Ventas V
oductos P
Clientes C
→
→
→
Pr
[1] ( ) ∏nombre σ población="Palencia"
C
[2] ( ) ∏cód Pr oducto,Descripción
σ cod Pr oducto=Descripción
P
[3] (( ) ) ∏C.Nombre,P.Descripción,V.Cantidad σ cantidad >500V ∞P∞C
[4] C (C V) ∏nombre −∏nombre ∞
[5] Se aplica una división sobre toda la tabla de ventas
mezclada con clientes y se divide entre la tabla de
productos (quedan los clientes que tienen todas las
combinaciones de la tabla de productos) (( ( )):( )) ∏nombre ∏C.nombre,C.NºCliente,V.codproducto
C∞V ∏codproducto
P
[6] Dividimos la consulta en dos, primero obtenemos la fila
correspondiente a la venta nº 18 y luego la combinamos
con todas las demás eliminando las que tengan ventas
menores
'
'
. '.
18
V V
V V
V cantidad V Cantidad
idVenta
∞>
σ =
→
[7] Se resuelve sacando primero los productos que sí se
compraron en Palencia y luego restándoles del conjunto
total de Productos
P Pale
C V Pale
codproducto
V codproducto población Palencia
∏ −
∏ .
((σ =" "
)∞ )→
[8] Se trata de una intersección entre los productos de
Palencia y los productos comprados en Valladolid
Pale Vall
C V Vall
C V Pale
V codproducto población Valladolid
V codproducto población Palencia
I
∏ ∞ →
∏ ∞ →
=
=
(( ) )
(( ) )
. " "
. " "
σ
σ
[9] Necesitamos sacar la lista de poblaciones con los códigos
de productos que se han vendido en ellas. Luego
dividimos entre los códigos de la tabla de productos y
quedarán las poblaciones en las que se han pedido todos
los códigos
(( ( )):( )) ∏poblacion ∏C.población,V.codproducto
C∞V ∏codprodcto P
[10]
( ( )) ∏nombre,nº factura σ
Pagada=0
C∞F[11] La consulta no se puede hacer como la anterior, ya que
puede haber clientes que hayan pagado algunas facturas y
otras no. Se parte de la consulta anterior para hacer esto:
Pagadores
C F Pagadores
nombre
nombre Pagada
∏ −
∏ (σ =0
( ∞ ))→
|
viernes, 7 de junio de 2013
Algebra relacional
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario