Álgebra Relacional
Tips
- Según Meca: sólo usar Join, Select y Proyección
Símbolos Unicode
Para copiar y pegar en un Textbox en Draw.io (usar ctrl+shift+V)
- Asignación: 🠘
- Referencia: 🠚
- Selección: σ
- Proyección: π
- Producto cartesiano: ×
- Unión: ⋃
- Intersección: ⋂
- Producto natural: |×|
- Join: X̲̅
- Join Natural: X̲̅ᴺ
- División: %
- Actualización: δ
- Y lógico: ∧
- Ó lógico: ∨
Operaciones fundamentales
Todas las operaciones sobre tablas devuelven una tabla nueva
- Trabajamos con la teoría de conjuntos, por lo que los resultados nunca tendrán registros repetidos
Selección
- @ Selecciona los registros de la tabla que cumplan la condición (predicado)
- Trabajamos con operaciones de conjuntos
Ejemplo:
R1 🠘 σ(Alumnos)
legajo=3192
R2 🠘 σ(Planes)
codDpto='ISI' ∧ añoPlan>=1985 ∧ añoPlan<=1995
Proyección
- Devuelve una tabla con todos los registros de la relación seleccionada, pero sólo con los atributos especificados
- Si hubiera dos registros cuyos atributos seleccionados son iguales, se descarta el segundo registro, ya que no se pueden repetir elementos
R1 🠘 π(Alumnos)
legajo, apellido_nombre
R2 🠘 π (σ(Alumnos) )
apellidoNombre legajo>35000
direccion
(obtener nombre completo y dirección de los Alumnos con legajo >35000)
Producto cartesiano
- Igual que la operación de conjuntos
- ! Puede mezclar atributos que no tienen sentido
- Para eso debemos hacer una selección para filtrar los que atributos que coincidan con sentido
- Hay otros operadores que tienen como base una combinación del producto cartesiano y la selección, para resolver este problema
- Cantidad de columnas:
Departamentos
Planes
devuelve la siguiente tablaDepartamentos.codDpto = Planes.codDpto
(Departamento
Planes
) marca en rojo los atributos que tienen sentido para el análisis
Unión
- ! Pre-requisito: Ambas tablas deben ser unión-compatibles
- Deben tener la misma cantidad de atributos, y estos deben ser de igual dominio
- Devuelve una tabla con todos los registros de la primera tabla, más todos los registros de la segunda
Estas tablas no son compatibles, porque id_prof y legajo (aunque ambos son tipo int
) no tienen el mismo significado semántico
Para arreglar este error, podemos eliminar los atributos incompatibles mediante una proyección:
Diferencia
- ! Mismo pre-requisito que para la unión (unión-compatibles)
- &
nombreCompleto(Alumnos) nombreCompleto(Profesores) elimina de Alumnos todos los alumnos que son profesores
Unión
- ! Mismo pre-requisito que para la unión (unión-compatibles)
Producto Natural !
Producto cartesiano al que se aplicó selección de los atributos con igual dominio y se realizó proyección, quitando columnas repetidas
Planteo: Se quiere una lista con los datos de todos los alumnos inscriptos en carreras de planes del año 2008, indicando denominación del plan de estudio
Join X̲̅
Subconjunto del producto cartesiano al que se le aplicó la condición
Join Natural X̲̅ᴺ
Equi-join al que se le elimina uno de cada uno de los registros repetidos
División
Sea
- ! Pre-Requisito:
debe estar formada por un subconjunto de columnas de - Resulta en todas las columnas de
que no están en , y además los registros cumplen que existen todos los valores de las tuplas de para cada valor distinto de las columnas distintas de
- Compara que los atributos en amarillo sean iguales, y si lo son, de ese registro retorna las columnas restantes (fuera del subconjunto del divisor)
- S
<-
π codDpto, añoPlan, codMateria (σ legajo = 37556 (AlumnosExamenes)) - R
<-
π legajo, codDpto, añoPlan, codMateria (AlumnosExamnes) - R % S
- Tenemos que sacar fechaExamen y nota porque en S están seleccionados los exámenes (con sus fechas y notas) los exámenes del alumno, que van a discrepar con los exámenes de los otros, y esto no es relevante al caso de uso