Capítulo 3: Álgebra Relacional - Parte 2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 44

Capítulo 3

Álgebra Relacional – parte 2


División
• La operación división, resulta adecuada para
muchas consultas que incluyen la frase “para
todo” o “todos”.
• Notación: r ÷ s
• Definición:
– Sea r(R) y s(S) donde
– R = (A1,…,Am, B1, …, Bn)
– S = (B1, …, Bn)
– r ÷ s(R - S) y R - S = (A1,…,Am)
– r ÷ s =def { t ∈ ΠR-S(r) | ∀u ∈ s (t.u ∈ r) }
División

Relaciones r, s:

r÷s:
División

Relaciones r, s:

r÷s:
División: ejemplo 1
libro(título,ISBN,editorial,edición)
libroBib(numInv,ISBN,nombreBib)
biblioteca(nombreBib,calle,número)
• Encontrar los títulos de los libros que están en todas las bibliotecas.
• Proceso para hacer una consulta con división
1. Identificar tablas a usar
2. Reescribir consulta en español de modo que quede más claro dónde se usa
división y la división sea más evidente.
3. Identificar partes de la división
A. Escribirlas primero en español
B. Luego pasarlas a AR
4. Usar proyecciones para que partes cumplan con esquemas exigidos por
división.
5. Escribir división, chequearla usando la definición de división y corregirla
6. Hacer la consulta completa en AR que involucra división.
División
 Sea q = r ÷ s entonces
– q es la relación más grande que satisface q x s ⊆ r
División: ejemplo 2
course(course id, title, dept name, credits)
student(ID, name, dept name, tot cred)
takes(ID, course id, sec id, semester, year, grade)
• Obtener los estudiantes que han tomado todos los cursos de
Biología.
• Proceso para hacer una consulta con división
1. Identificar tablas a usar
2. Reescribir consulta en español de modo que quede más claro dónde se usa
división y la división sea más evidente.
3. Identificar partes de la división
A. Escribirlas primero en español
B. Luego pasarlas a AR
4. Usar proyecciones para que partes cumplan con esquemas exigidos por
división.
5. Escribir división, chequearla usando la definición de división y corregirla.
6. Hacer la consulta completa en AR que involucra división.
Agregación
 Función de Agregación: toma una colección de valores y
retorna un valor simple como resultado.
 En AR se consideran las siguientes funciones de agregación:
avg, min, max, sum, count (cantidad de valores).
 Hay casos donde debemos eliminar múltipes occurrencias de
un valor antes de computar una función de agregación.
o Si queremos eliminar duplicados usamos los mismos nombres de
función, con la adición de “distinct” al final.
o Ejemplo: countdistinct.
Agregación
• Ejemplo: instructor(ID, name, dept name, salary)
– ¿Cuál es el máximo salario?
– ¿Cuántos departamentos tienen instructores?
– Obtener el máximo salario y la cantidad de departamentos
con instructores
• ¿Cómo se puede hacer para obtener resultados para
las preguntas anteriores?
• Ayuda: usar las funciones de agregación anteriores.
Agregación
• Operación de agregación en AR
F1( A1), F2( A2),…, Fn(An) (E)
o E expresión de AR
o Cada Fi es una función de agregación
o Cada Ai es un nombre de atributo
• Semántica: el resultado tiene una tupla (a1, a2, …, an) donde,
para cada i, ai es el resultado de aplicar la función de
agregación Fi al multiconjunto de valores del atributo Ai en E.
• Ejemplo: instructor(ID, name, dept name, salary)
 ¿Cuál es el máximo salario?
Agregación
• Operación de agregación en AR
F1( A1), F2( A2),…, Fn(An) (E)
o E expresión de AR
o Cada Fi es una función de agregación
o Cada Ai es un nombre de atributo
• Semántica: el resultado tiene una tupla (a1, a2, …, an) donde,
para cada i, ai es el resultado de aplicar la función de
agregación Fi al multiconjunto de valores del atributo Ai en E.
• Ejemplo: instructor(ID, name, dept name, salary)
 ¿Cuál es el máximo salario?
 max(salario) (instructor)
Agregación

Relación r

sum(c) (r)
Agregación

Relación r

sum(c) (r)
Agregación
• Ejemplo: instructor(ID, name, dept name, salary)
– ¿Cuál es el máximo salario de cada departamento?
– ¿Cuántos instructores tiene cada departamento?
– Obtener para cada departamento el máximo salario y la
cantidad de instructores.
• ¿Cómo se puede hacer para obtener resultados para
las preguntas anteriores?
• Ayuda: ¿cómo usar las funciones de agregación
anteriores?
Agregación
 Operación de agregación en AR (caso más complejo)

G1, G2, …, Gn F1( A1), F2( A2),…, Fn(An) (E)


o E expresión de AR
o G1, G2 …, Gn lista de atributos en los cuales agrupar (puede ser vacío)
o Cada Fi es una función de agregación
o Cada Ai es un nombre de atributo
 Ejemplo: Sea instructor(ID, name, dept name, salary)
o ¿Cuántos instructores tiene cada departamento?
Agregación
 Operación de agregación en AR (caso más complejo)

G1, G2, …, Gn F1( A1), F2( A2),…, Fn(An) (E)


o E expresión de AR
o G1, G2 …, Gn lista de atributos en los cuales agrupar (puede ser vacío)
o Cada Fi es una función de agregación
o Cada Ai es un nombre de atributo
 Ejemplo: Sea instructor(ID, name, dept name, salary)
o ¿Cuántos instructores tiene cada departamento?
o dept_name count(ID) (instructor)
Agregación
Semántica:
• Las tuplas en el resultado de la expresión E se dividen
en grupos tales que:
1. Todas las tuplas del grupo tienen los mismos valores para
G1, G2, …, Gn.
2. Las tuplas de grupos diferentes tienen valores diferentes
para G1, G2, …, Gn.
• Para cada grupo asociado a (g1, g2, …, gn) el resultado
tiene una tupla (g1, g2, …, gn, a1, a2, …, am)
– donde, para cada i, ai es el resultado de aplicar la función
de agregación Fi al multiconjunto de valores del atributo Ai
en el grupo asociado a (g1, g2, …, gn) .
Agregación
• Encontrar el salario promedio en cada departamento
Agregación
• Encontrar el salario promedio en cada departamento
– dept_name avg(salary) (instructor)
Agregación
• Encontrar el salario promedio en cada departamento
– dept_name avg(salary) (instructor)
Ejemplo:
bibliotecario(antigüedad,DNI)
trabajaEn(DNI,nombreBib)
• Obtener el promedio de las antigüedades
de los bibliotecarios que trabajan en cada
biblioteca.
Agregación
• Algunas indicaciones para hacer consultas que involucran agregación (lo
necesitarán para el práctico):
– Muchas veces el operación de agregación se aplica luego de una
consulta y no a una tabla de la BD.
• Pensar en esa consulta primero (ejemplo anterior).
– Muchas veces el resultado de la agregación se usa dentro de otra
consulta.
• P. ej. Obtener el promedio de las antigüedades de los bibliotecarios que
trabajan en cada biblioteca junto con la información de la biblioteca.
• Usar renombramiento de columnas que corresponden a funciones de
agregación.
– A veces se necesita aplicar agregación más de una vez
• p. ej. Máximo de las antigüedades promedio de las bibliotecas.
• No se pueden componer funciones de agregación.
• Usar renombramiento antes de hacer última agregación.
Reuniones Externas
• Ejemplo: Sean las tablas:
– persona(nombre, dirección, DNI),
– teléfonos(DNI, número) .
La consulta: obtener todas las personas y si tienen teléfonos,
también sus teléfonos.
– No es persona ⨝ teléfonos!
– ¿Por qué?
Reuniones Externas
• Situación: Sea r(R) y s(S), r ⨝ s solo informa para
cada tupla de r con qué tuplas de s caza;
– si una tupla de r no caza con ninguna tupla de s, entonces
esa tupla de r no aparece en el resultado.
– Lo mismo para las tuplas de s.
– A veces necesito estas informaciones adicionales a r ⨝ s
Reuniones Externas
• Problema: Sea r(R) y s(S), se quiere expresar información de
casamiento de tuplas de r y de s y también información de
tuplas de r/tuplas de s que no cazan con tuplas de la otra
tabla.
• Solución: Definir operadores especiales que son extensiones
de la reunión natural que evitan pérdida de informaciones de
tuplas que no cazan (ya sea en una o ambas de las tablas).
Reuniones Externas: ejemplo
 Relación instructor Relación teaches
ID name dept_name ID course_id
10101 Srinivasan Comp. Sci. 10101 CS-101
12121 Wu Finance 12121 FIN-201
15151 Mozart Music 76766 BIO-101
 Reunión natural

instructor teaches
ID name dept_name course_id
10101 Srinivasan Comp. Sci. CS-101
12121 Wu Finance FIN-201
 Reunión externa a la izquierda
instructor teaches
ID name dept_name course_id
10101 Srinivasan Comp. Sci. CS-101
12121 Wu Finance FIN-201
15151 Mozart Music null
Calcula: Profesores que no enseñan ninguna materia y profesores
que enseñan materia más código de la materia enseñada.
• Es útil para saber a quién hay que asignarle materia para enseñar.
Reuniones Externas

 Reuniones externas pueden ser expresadas usando


operadores básicos.
 ¿Cómo expresar la reunión externa a la izquierda?
 ayuda: Computar la reunión natural y luego agregar tuplas
de una relación que no cazan con las tuplas en la otra
relación.
 Usar valores nulos
Reuniones Externas

 Reuniones externas pueden ser expresadas usando


operadores básicos.
 ¿Cómo expresar la reunión externa a la izquierda?
 ayuda: Computar la reunión natural y luego agregar tuplas
de una relación que no cazan con las tuplas en la otra
relación.
 Usar valores nulos

 Así r s puede escribirse como:


(r s) U (r – ∏R(r s) x {(null, …, null)}
Reuniones Externas: ejemplo

 Reunión externa a la derecha


instructor teaches

ID name dept_name course_id


10101 Srinivasan Comp. Sci. CS-101
12121 Wu Finance FIN-201
76766 null null BIO-101
Reuniones Externas: ejemplo

 Reunión extrerna full


instructor teaches

ID name dept_name course_id


10101 Srinivasan Comp. Sci. CS-101
12121 Wu Finance FIN-201
15151 Mozart Music null
76766 null null BIO-101
Manejo de valores nulos
• Manejo de valores nulos en términos:
– ¿El resultado de una expresión aritmética involucrando null
qué debería dar?
Manejo de valores nulos
• Manejo de valores nulos en términos:
– ¿El resultado de una expresión aritmética involucrando null
qué debería dar?
null
– Las funciones de agregación ignoran valores nulos (decisión
arbitraria).
• Manejo de valores nulos en predicados:
– ¿Comparaciones (como <, <=, >, >= y ≠) con valores null qué
deberían retornar?
Manejo de valores nulos
• Manejo de valores nulos en términos:
– ¿El resultado de una expresión aritmética involucrando null
qué debería dar?
null
– Las funciones de agregación ignoran valores nulos (decisión
arbitraria).
• Manejo de valores nulos en predicados:
– ¿Comparaciones (como <, <=, >, >= y ≠) con valores null qué
deberían retornar?
– El valor de verdad unknown.
Manejo de valores nulos
• Las comparaciones que incluyan nulos pueden
aparecer dentro de expresiones booleanas con
conectivos.
• Una lógica de tres valores de verdad se usa con el
valor de verdad unknown.
o OR: (unknown or true) = true,
(unknown or false) = unknown
(unknown or unknown) = unknown
o ¿Y para AND cómo es?
Manejo de valores nulos
• Las comparaciones que incluyan nulos pueden
aparecer dentro de expresiones booleanas con
conectivos.
• Una lógica de tres valores de verdad se usa con el
valor de verdad unknown.
o OR: (unknown or true) = true,
(unknown or false) = unknown
(unknown or unknown) = unknown
o ¿Y para AND cómo es?
o AND: (true and unknown) = unknown,
(false and unknown) = false,
(unknown and unknown) = unknown
o NOT: (not unknown) = unknown
Manejo de valores nulos
• Ahora vemos el manejo de valores nulos para
operaciones del álgebra relacional.
• La operación selección evalúa el predicado P en σP(E)
sobre cada tupla de E.
– Si P(t) devuelve el valor cierto, se añade t al resultado.
– ¿Qué pasa sino?
Manejo de valores nulos
• Ahora vemos el manejo de valores nulos para
operaciones del álgebra relacional.
• La operación selección evalúa el predicado P en σP(E)
sobre cada tupla de E.
– Si P(t) devuelve el valor cierto, se añade t al resultado.
– ¿Qué pasa sino?
– En caso contrario, si P(t) devuelve desconocido o falso, t no se
añade al resultado
• Reunión natural r ⨝ s: ¿si dos tuplas tr∈r y ts∈s,
tienen un valor nulo en un atributo común, entonces qué
pasa con las tuplas?
Manejo de valores nulos
• Ahora vemos el manejo de valores nulos para
operaciones del álgebra relacional.
• La operación selección evalúa el predicado P en σP(E)
sobre cada tupla de E.
– Si P(t) devuelve el valor cierto, se añade t al resultado.
– ¿Qué pasa sino?
– En caso contrario, si P(t) devuelve desconocido o falso, t no se
añade al resultado
• Reunión natural r ⨝ s: ¿si dos tuplas tr∈r y ts∈s,
tienen un valor nulo en un atributo común, entonces qué
pasa con las tuplas?
– no casan.
• Para eliminación de duplicados y agrupamientos a null
se lo trata como a cualquier otro valor.
Manejo de valores nulos
• Proyección: trata los nulos como cualquier otro valor
al eliminar duplicados.
• Unión, intersección y diferencia: tratan las tuplas
que tienen los mismos valores en todos los campos
como duplicados incluso si algunos de los campos
tienen valores nulos en ambas tuplas.
• Agregación: Cuando hay valores nulos en los
atributos agregados, la función de agregación a ser
aplicada borra los valores nulos antes de aplicarse.
– Si el multiconjunto resultante está vacío, el resultado de la
función de agregación es null.
Asignación
• Situación: Si un enunciado para una consulta
es muy largo y complejo, puede suceder que
la consulta a escribir en AR sea muy grande y
compleja. Por lo que puede resultar
– difícil de leer y entender,
– difícil de construir.
• Problema: Por lo que hace falta algún
mecanismo para poder entender y construir
con facilidad consultas complejas.
Asignación
• En la práctica una expresión de consulta que involucra
relaciones de la BD representa una tabla variable; porque
las relaciones en las que se basa varían.
• Sea E una expresión de AR, entonces la asignación
rE
se hace sobre una variable relacional temporal r –
i.e. su valor es una tabla.
• Es lo mismo que la asignación en programación
imperativa.
Asignación
persona(DNI, nombre,apellido)
biblioteca(nombreBib,calle,número)
bibliotecario(antigüedad,DNI)
trabajaEn(DNI,nombreBib)
• Dar las bibliotecas en las que trabajan los
bibliotecarios de apellido Pérez.
r  σapellido=“Pérez” (persona ⨝ bibliotecario)
s  Π antigüedad, DNI (r)
ΠnombreBib (s ⨝ trabajaEn)
Asignación
• Solución: La asignación () puede usarse para expresar
consultas complejas como una secuencia de asignaciones
seguida por una consulta resultante.
– También sirve para expresar alteraciones a la BD, pero esto no se ve en
este curso.
• Escribir la consulta como un programa secuencial consistente
de:
1. una serie de asignaciones,
2. seguida de una expresión cuyo valor se muestra como resultado de
la consulta.
Asignación
• Sean las tablas:
empleado(pId,nombre-empleado,calle,ciudad)
trabaja(pId,sId,sueldo)
sucursal(sId,nombre-empresa,ciudad)
jefe(pIdempleado,pIdjefe)

• Averiguar el nombre de la compañía con mayor


número de empleados.
r  ρ r(nombre-empresa, cantEmpleado) nombre-empresa G count(pId) (trabaja
⨝ sucursal)
s  ρ s(maxCantEmpleado) (G max(cantEmpleado) r)
Π nombre-empresa (σ cantEmpleado = maxCantEmpleado (r x s))

También podría gustarte