Álgebra relacional

En la teoría de bases de datos, el álgebra relacional es una teoría que utiliza estructuras algebraicas con una semántica bien fundamentada para modelar datos y definir consultas sobre ellos. La teoría fue presentada por Edgar F. Codd.

La principal aplicación del álgebra relacional es proporcionar una base teórica para las bases de datos relacionales, en particular los lenguajes de consulta para dichas bases de datos, entre los que destaca SQL. Las bases de datos relacionales almacenan datos tabulares representados como relaciones. Las consultas sobre bases de datos relacionales a menudo también devuelven datos tabulares representados como relaciones.

El propósito principal del álgebra relacional es definir operadores que transformen una o más relaciones de entrada en una relación de salida. Dado que estos operadores aceptan relaciones como entrada y producen relaciones como salida, pueden combinarse y usarse para expresar consultas potencialmente complejas que transforman potencialmente muchas relaciones de entrada (cuyos datos se almacenan en la base de datos) en una sola relación de salida (los resultados de la consulta) .

Describe el aspecto de la manipulación de datos. Estas operaciones se usan como una representación intermedia de una consulta a una base de datos y, debido a sus propiedades algebraicas, se usa para obtener una versión mejor y más eficiente de dicha consulta.

Tuplas

editar

Una tupla se define como una función finita que asocia unívocamente los nombres de los campos de una relación con los valores de una instanciación de la misma. En términos simples, es una fila de una tabla relacional.

Unión compatible

editar

Una unión es compatible entre dos relaciones R, S, si ellas poseen el mismo grado y el dominio del i-ésimo elemento de la relación R es el mismo que el i-ésimo elemento de la relación S.

Grado (Aridad)

editar

Número de atributos.

Las operaciones

editar

Básicas

editar

Cada operador del álgebra acepta una o dos relaciones y retorna una relación como resultado.σ y Π son operadores unarios, el resto de los operadores son binarios. Las operaciones básicas del álgebra relacional son:

Selección - restricción (σ)

editar

Permite seleccionar un subconjunto de tuplas de una relación (R), todas aquellas que cumplan la(s) condición(es) P, esto es:

Ejemplo:

Selecciona todas las tuplas que contengan Gómez como apellido en la relación Alumnos.

Una condición puede ser una combinación booleana, donde se pueden usar operadores como: , , combinándolos con operadores .

Proyección (Π)

editar

Permite extraer columnas (atributos) de una relación, dando como resultado un subconjunto vertical de atributos de la relación, esto es:

donde son atributos de la relación R .

Ejemplo:

Selecciona los atributos Apellido, Semestre y NumeroControl de la relación Alumnos, mostrados como un subconjunto de la relación Alumnos.

Producto cartesiano (x)

editar

El producto cartesiano de dos relaciones se escribe como:

y entrega una relación, cuyo esquema corresponde a una combinación de todas las tuplas de R con cada una de las tuplas de S, y sus atributos corresponden a los de R seguidos por los de S.

Ejemplo:

Muestra una nueva relación, cuyo esquema contiene cada una de las tuplas de la relación Alumnos junto con las tuplas de la relación Maestros, mostrando primero los atributos de la relación Alumnos seguidos por las tuplas de la relación Maestros.

Unión (∪)

editar

La operación.

retorna el conjunto de tuplas que están en R, o en S, o en ambas.R y S deben ser uniones compatibles.

Diferencia (-)

editar

La diferencia de dos relaciones, R y S denotada por:

entrega todas aquellas tuplas que están en R, pero no en S.R y S deben ser uniones compatibles.

Estas operaciones son fundamentales en el sentido en que (1) todas las demás operaciones pueden ser expresadas como una combinación de éstas y (2) ninguna de estas operaciones pueden ser omitidas sin que con ello se pierda información.

No básicas o Derivadas

editar

Entre los operadores no básicos tenemos:

Intersección (∩)

editar

La intersección de dos relaciones se puede especificar en función de otros operadores básicos:

La intersección, como en Teoría de conjuntos, corresponde al conjunto de todas las tuplas que están en R y en S, siendo R y S uniones compatibles.

Unión natural (⋈) (Natural Join)

editar

La operación unión natural en el álgebra relacional es la que permite reconstruir las tablas originales previas al proceso de normalización. Consiste en combinar las proyección, selección y producto cartesiano en una sola operación, donde la condición es la igualdad Clave Primaria = Clave Externa (o Foránea), y la proyección elimina la columna duplicada (clave externa).

Expresada en las operaciones básicas, queda


Una reunión theta ( θ-Join) de dos relaciones es equivalente a:

donde la condición es libre.

Si la condición es una igualdad se denomina EquiJoin.

División (/) (Cociente)

editar

Supongamos que tenemos dos relaciones A(x, y) y B(y) donde el dominio de y en A y B, es el mismo.

El operador división A / B retorna todos los valores de x tales que para todo valor y en B existe una tupla en A.

Agrupación (Ģ) (Unión)

editar

Permite agrupar conjuntos de valores en función de un campo determinado y hacer operaciones con otros campos.

Ejemplos

editar

Suponga las relaciones o tablas:

Alumno
IDNOMBRECIUDADEDAD
01PedroSantiago14
11JuanBuenos Aires18
21DiegoLima12
31RositaConcepción15
41ManuelLima17
Apoderado
IDNOMBREFONOID_ALUMNO
054Víctor65464421
457José45465411
354María99745531
444Paz74742301
Curso
CODNOMBREFECHA_INICIODURACIÓNVALOR
01142Psicología13-01153.000
02145Biología15-02122.500
03547Matemáticas01-03304.000
04578Música05-04101.500
05478Física20-04153.200
Inscrito
IDID_ALCOD
10105478
20102145
31103547
42102145
54103547


Mostrar los nombres de los alumnos y su apoderado

editar

Primero, realizaremos una combinación entre alumnos y apoderados (pues necesitamos saber a que alumno le corresponde tal apoderado). La combinación realizará un producto cartesiano, es decir, para cada tupla de alumnos (todas las filas de alumnos) hará una mezcla con cada una tupla de apoderados y seleccionará aquellas nuevas tuplas en que alumnos.id sea igual a apoderados.id_alumno, esto es:

ID (alumno)NOMBRE (alumno)CIUDADEDADID (apoderado)NOMBRE (apoderado)FONOID_ALUMNO
01PedroSantiago14054Víctor65464421
01PedroSantiago14457José45465411
01PedroSantiago14354María99745531
01PedroSantiago14444Paz74742301
11JuanBuenos Aires18054Víctor65464421
11JuanBuenos Aires18457José45465411
11JuanBuenos Aires18354María99745531
11JuanBuenos Aires18444Paz74742301
21DiegoLima12054Víctor65464421
21DiegoLima12457José45465411
21DiegoLima12354María99745531
21DiegoLima12444Paz74742301
31RositaConcepción15054Víctor65464421
31RositaConcepción15457José45465411
31RositaConcepción15354María99745531
31RositaConcepción15444Paz74742301
41ManuelLima17054Víctor65464421
41ManuelLima17457José45465411
41ManuelLima17354María99745531
41ManuelLima17444Paz74742301

Por tanto, el resultado final de la combinación es:

Alumnos Apoderados
ID (alumno)NOMBRE (alumno)CIUDADEDADID (apoderado)NOMBRE (apoderado)FONOID_ALUMNO
01PedroSantiago14444Paz74742301
11JuanBuenos Aires18457José45465411
21DiegoLima12054Víctor65464421
31RositaConcepción15354María99745531

Ahora, aquí debemos mostrar solo el nombre del alumno y el nombre del apoderado, esto lo hacemos con un Proyect o Proyección, donde la tabla final sería:

NOMBRE (alumno)NOMBRE (apoderado)
PedroPaz
JuanJosé
DiegoVíctor
RositaMaría

Resumiendo en un solo paso:

Alumnos Apoderados

Se lee: Proyecta los nombre de alumnos y nombre de apoderados de los alumnos cuyo ID sea el mismo que el ID_ALUMNO de los apoderados.

Mostrar el nombre de los alumnos inscritos y el nombre de los cursos que tomaron

editar

Comenzaremos con una combinación entre los inscritos y los cursos para obtener el nombre de los cursos:

Lo que nos da la tabla:

Resultado 1
IDID_ALCOD (inscritos)COD (cursos)NOMBREFECHA_INICIODURACIONVALOR
1010547805478Física20-04153.200
2010214502145Biología15-02122.500
3110354703547Matemáticas01-03304.000
4210214502145Biología15-02122.500
5410354703547Matemáticas01-03304.000

Como podemos observar, la combinación solo nos entrega las combinaciones entre Inscritos y Cursos en que COD sea igual entre los inscritos y el curso correspondiente.

Ahora necesitamos los nombres de los alumnos inscritos. Al resultado anterior (Resultado 1) aplicaremos una nueva combinación comparando los ID de los alumnos para colocar el nombre adecuado con el estudiante adecuado:

Resultado 1 Alumnos

O escrito todo junto:


Inscritos Cursos Alumnos

La tabla de este nuevo resultado sería:

Resultado 2
ID (inscrito)ID_ALCOD (inscritos)COD (cursos)NOMBRE (curso)FECHA_INICIODURACIONVALORID (alumno)NOMBRE (alumno)CIUDADEDAD
1010547805478Física20-04153.20001PedroSantiago14
2010214502145Biología15-02122.50001PedroSantiago14
3110354703547Matemáticas01-03304.00011JuanBuenos Aires18
4210214502145Biología15-02122.50021DiegoLima12
5410354703547Matemáticas01-03304.00041ManuelLima17

Finalmente con una Proyección mostraremos el nombre del alumno y el curso inscrito:

Resultado 2


Donde la tabla final sería:

Tabla final
NOMBRE (alumno)NOMBRE (curso)
PedroFísica
PedroBiología
JuanMatemáticas
DiegoBiología
ManuelMatemáticas


La expresión completa sería:

Inscritos Cursos Alumnos

Mostrar los nombres y precios de los cursos inscritos con valor menor a 3.000

editar

Resultado 1

Lo que nos entregaría la tabla:

Resultado final
NOMBREVALOR
Biología2.500
Música1.500

Y la expresión completa sería:

Curso Inscrito

Véase también

editar

Enlaces externos

editar