-
Este es el primero de dos
-
vídeos donde donde aprenderemos sobre Álgebra Relacional
-
El Álgebra Relacional es un lenguaje formal
-
Es un álgebra que forma
-
la base de lenguajes implementados como lo es SQL
-
En este vídeo iremos
-
aprendiendo las bases del
-
Lenguaje de Consultas del Álgebra Relacional y un poco de los operadores más populares.
-
En el segundo vídeo aprenderemos
-
algunos operadores adicionales y algunas
-
notaciones alternativas para el Álgebra Relacional.
-
Ahora, recapitulemos primero de
-
nuestro vídeo previo sobre consultas
-
relacionales, que las consultas sobre
-
bases de datos relacionales operan sobre
-
relaciones(tablas) y que estas producen relaciones(tablas) como resultado
-
Así, sí escribimos una consulta(query)
-
que opere, digamos sobre las tres
-
relaciones representadas aquí, el
-
resultado de la consulta será una nueva relación(tabla)
-
Y, de hecho, podemos
-
hacer una consulta posterior sobre esta
-
nueva relación o combinar la
-
nueva relación con nuestras relaciones(tablas) previas
-
Así que empecemos con el Álgebra Relacional
-
Para los ejemplos en
-
este vídeo estaremos
-
usando una simple base de datos de admisión a universidades con tres relaciones(tablas)
-
La primera relación, la relación de
-
universidades, que contiene información sobre el
-
nombre de la universidad, el estado y la cantidad de estudiantes (enrollment)
-
La segunda relación, la relación de
-
estudiantes que contiene un ID
-
para cada estudiante, el nombre del estudiante,
-
GPA y el tamaño de la preparatoria a la que ellos asistieron.
-
Y finalmente, la tercera relación que contiene
-
información sobre los registros de estudiantes a las universidades
-
Específicamente, el ID del estudiante, el
-
nombre de la universidad en donde se
-
registraron, la carrera
-
que solicitaron y la decisión de aceptados o no
-
He subrayado las claves(llaves) de las tres relaciones
-
Como un recordatorio, una clave(llave) es
-
un atributo o un conjunto de
-
atributos cuyos valores
-
se garantiza serán únicos.
-
Así, por ejemplo, estaremos
-
asumiendo que el nombre de universidad sera único,
-
que los IDs de los estudiantes serán unicos y que
-
los estudiantes sólo se registraran a
-
una carrera en particular por cada universidad una sola vez.
-
Así tendremos una
-
imagen de las tres relaciones en
-
la parte inferior de la diapositiva durante el vídeo.
-
La consulta más simple en el álgebra
-
relacional es una consulta
-
que es simplemente el nombre de una relación.
-
Así, por ejemplo, podemos
-
escribir una consulta, "estudiante"(student) y esta
-
es una expresión valida en álgebra relacional.
-
Sí corremos esta consulta en
-
nuestra base de datos obtendremos como
-
resultado una copia de la relación de estudiantes
-
muy sencillo.
-
Ahora lo que pasara después
-
es que estaremos usando
-
operadores del álgebra relacional
-
para filtrar relaciones, rebanar relaciones y combinar relaciones
-
Así que vayamos por esos operadores.
-
El primer operador es el operador seleccionar.
-
El operador seleccionar es usado
-
para quitar ciertas filas de una relación
-
El operador seleccionar se denota por
-
Sigma con un sub-índice que
-
es la condición que se usara para
-
filtrar las filas que extraeremos de las relaciones
-
Así que vayamos con tres ejemplos aquí.
-
El primer ejemplo dice que
-
queremos encontrar los estudiantes
-
cuyo GPA es mayor que 3.7.
-
Así que para escribir esa
-
expresión en álgebra relacional, escribiremos
-
Sigma el cual es
-
el operador seleccionar y con
-
la condición en el sub-índice que
-
estaremos filtrando el GPA mayor a
-
3.7 -- y la relación sobre la que estamos buscando
-
Así, esta expresión regresara
-
un subconjunto de la tabla
-
estudiantes conteniendo aquellas filas
-
con el GPA mayor a 3.7.
-
Sí queremos filtrar con dos
-
condiciones, solo hacemos
-
un "and" de las condiciones en el sub-índice del Sigma
-
Así sí queremos, digamos, aquellos estudiantes
-
cuyo GPA es mayor a 3.7
-
y cuyo tamaño de su preparatria
-
sea menor a 1000,
-
escribiremos, seleccionar GPA mayor a 3.7
-
Usamos un operador
-
"and logico" con el simbolo ^
-
tamaño de la preparatoria menor a
-
1000, y la aplicamos sobre la relación de estudiantes.
-
Y una vez más el resultado de
-
esta será un subconjunto de la
-
relación de estudiantes conteniendo las filas que satisfagan la condición.
-
Sí queremos encontrar
-
los registros para Stanford para
-
la carrera CS, entonces
-
estaremos realizando una condición de selección sobre la relación "Apply"
-
Una vez más, escribimos Sigma
-
y ahora en el sub-índice
-
estará diciendo que el nombre
-
de universidad sea Stanford y que la carrera sea CS
-
Otra vez, el operador and ^, y
-
que será aplicado sobre
-
la relación "apply" y
-
esta regresara como
-
resultado, un subconjunto de la relación "apply"
-
Así que el caso general del
-
operador seleccionar es que tenemos a Sigma
-
Tenemos una condición como un
-
sub-índice y después tenemos un nombre de una relación.
-
Y regresamos como resultado el subconjunto de la relación.
-
Nuestro siguiente operador es el Operador Proyectar
-
Mientras el Operador Seleccionar toma ciertas filas,
-
el Operador Proyectar toma ciertas columnas.
-
Así que digamos que
-
estamos interesados en los registros a universidad,
-
pero todo lo que queremos saber es
-
la lista de los IDs y de la decisiones de aceptación.
-
El operador proyectar se escribe
-
usando el símbolo Griego Pi
-
y como sub-índice sera
-
la lista de nombres de columna que nos gustaría extraer.
-
Así escribimos ID, lo siento.
-
ID del estudiante(student ID), decisión(decision) y
-
lo aplicamos a la relación "apply"
-
Ahora lo que hemos obtendremos
-
de regreso es una relación que solo tiene 2 columns
-
Esta tendrá todas las
-
tuplas de "apply", pero
-
solo va a tener
-
los IDs de los estudiantes y la columna decisión.
-
Así que el caso general del
-
Operador Proyectar es la
-
proyección y después
-
la lista de atributos, que puede ser
-
cualquier cantidad de ellos y finalmente el nombre de la relación.
-
Ahora, que si estamos interesados en
-
obtener tanto filas como columnas al mismo tiempo.
-
Así si queremos sólo algunas
-
filas, y queremos sólo algunas columnas
-
Ahora vamos a unir operadores
-
Recuerda que las consultas relacionales producen relaciones.
-
Así que podemos escribir un
-
consulta digamos que el
-
operador seleccionar de los
-
estudiantes cuyos GPA son mayores a 3.7
-
Y esto es como lo hacemos
-
podemos tomar
-
la expresión entera la cual produce una
-
relación y podemos
-
aplicarle la proyección a esta, y
-
podemos obtener como resultado el id del
-
estudiante y el nombre del estudiante
-
muy bien.
-
Así que lo que de hecho vemos
-
ahora es el caso general
-
de los operadores selección y
-
de la proyección que fueron bastante de lo que dije al inicio.
-
Estuve engañándote un poquito
-
Cuando escribimos el operador
-
seleccionar, Este es un seleccionar(select)
-
con la condición sobre cualquier
-
expresión del álgebra
-
relacional, y sí esta es
-
muy grande podríamos querear
-
poner paréntesis
-
y de forma similar el operador proyección es
-
una lista de atributos de
-
cualquier expresión del álgebra relacional
-
y podemos unirlos tantos como quereamos
-
Podemos tener una selección sobre una proyección sobre
-
una selección, una selección, una proyección y así sucesivamente.
-
Ahora hablemos acerca
-
de valores duplicados en los resultados de consultas del álgebra relacional
-
Supongamos que necesitamos
-
una lista de las carreras para
-
las que personas se han registrado y la decisión para esas carreras.
-
Así que escribimos la
-
proyección de las carreras
-
y la decisión sobre la relación "apply"
-
Podrías pensar que cuando obtenemos
-
el resultado de la consulta, vamos a obtener un montón de valores duplicados.
-
Así tendremos CS si, CS
-
si, CS no, EE si, EE no, y así sucesivamente.
-
Puedes imaginar una
-
enorme base de datos real de una aplicación
-
va ha haber cientos de
-
personas registradas para carreras y tendrán un si o no como decisión
-
La semántica del álgebra
-
relacional dice que los duplicados son siempre eliminados
-
Así sí tu realizas una consulta
-
que lógicamente tendría un
-
montón de valores duplicados
-
tu sólo obtienes un valor para cada resultado
-
Esto es de hecho una pequeña diferencia con el lenguaje SQL
-
Mientras SQL esta basado en
-
lo que conocemos como multi-conjuntos o
-
bolsas y eso significa
-
que no eliminamos los duplicados, mientras
-
que el álgebra relacional esta basado
-
en conjuntos donde los duplicados son eliminados
-
O bien hay un multi-conjunto o hay una
-
mala definición del álgebra relacional
-
por lo mientras, pero estaremos bien
-
tan sólo considerando el conjunto álgebra relacional en estos vídeos.
-
Nuestro primer operador que combina dos
-
relaciones es el operador producto-cuz
-
también conocido como el producto cartesiano
-
Lo que este operador hace es
-
tomar dos relaciones y un poco de
-
pegamento para juntarlas a
-
su esquema resultante
-
es la unión de los
-
esquemas de las dos relaciones y
-
el contenido del resultado serán todas
-
las combinaciones de las tuplas(filas) de esas relaciones.
-
De hecho el conjunto normal
-
del producto cruz es el que
-
pudieras haber aprendido antes en la primaria
-
Así que hablemos, digamos
-
hacer el producto cruz de estudiantes y de "apply"
-
sí hacemos este
-
producto cruz, sólo para
-
tener una imagen, voy a pegar
-
estas dos relacionas para unirlas aquí.
-
sí hacemos el
-
producto cruz obtendremos como
-
resultado una gran relación, aquí, la cual
-
va a tener 8 atributos
-
Los 8 atributos de los estudiantes y "apply"
-
ahora el único
-
pequeño truco es
-
cuando pegamos dos relacionas para juntarlas
-
algunas veces tendrán el mismo atrubuto
-
duplicado y podemos ver que tendremos que tenemos SID en ambos lados
-
así sólo como una convención de notación
-
cuando el producto cruz es hecho
-
y hay dos atributos que son nombrados igual
-
A ellos se les antepone el nombre de la relación a la cual pertenecen
-
así este sería referenciado
-
en el producto cruz como
-
student.SID donde este otro
-
así sería referenciado
-
como apply.SID
-
De nuevo unimos,
-
en el producto cartesiano, las dos relaciones
-
con 4 atributos cada una.
-
obtenemos como resultado 8 atributos
-
Ahora hablemos obre el contenido de estos
-
supongamos que la relación de estudiantes
-
tiene S tuplas
-
mientras
-
que "apply" tiene 8(A) tuplas
-
el resultado del
-
producto cartesiano va a
-
tener SxA tuplas
-
va a tener una tupla
-
por toda combinación de tuplas
-
de la relación de estudiantes y de la relación "apply"
-
Ahora, el producto cruz parece
-
que podría no
-
ser útil , pero lo que es
-
interesante es que usamos
-
el producto cruz junto con otros operadores
-
Y veamos un gran ejemplo de esto
-
Supongamos que queremos
-
obtener el nombre y GPAs de los
-
estudiantes con una tamaño de preparatoria
-
mayor a 1000 y a aquellos que se
-
registraron para CS y no fueron aceptados
-
OK echemos un un vistazo.
-
vamos a tener acceso
-
a las filas de la tablas estudiantes y de "apply"
-
con el fin de realizar consultas
-
lo que vamos a hacer es que
-
tomaremos los estudiantes que se registraron como punto de partida
-
ahora tenemos
-
una gran relación que contiene
-
8 atributos y todas esas tuplas que describimos previamente
-
Pero ahora vamos a
-
empezar a hacer cosas mas interesantes, porque
-
lo que vamos a hacer es
-
una gran selección sobre esta relación
-
Y para la selección primero que todo
-
es asegurarnos
-
de que sólo combine las tuplas de estudiantes con
-
las tuplas de "apply" que están referenciadas por el mismo studiante id
-
Para hacerlo escribimos
-
student.SID igual
-
a apply.SID
-
así hemos filtrado el resultado
-
del producto cruz, sólo
-
incluyendo combinaciones de estudiantes y registros
-
de "apply" por parejas para hacer el conjunto
-
Ahora que hemos hecho un pequeño adicional filtrado
-
decimos que queremos
-
que el tamaño de la preparatoria sea
-
mayor a 1000, así
-
usamos un operador "and" en la preparatoria
-
queremos también los que se registraron
-
a CS así que eso es un "and" y carrera igual a CS
-
Vamos a obtener una bonita gran consulta aquí
-
y finalmente queremos los que
-
fueron rechazados así "and" decisión
-
igual, sólo estamos usando R para rechazados
-
así tenemos una gigantesca consulta.
-
Esto nos da exactamente lo que
-
queremos excepto por una cosa
-
la cual es, como ya había dicho, todo lo que queremos es sus nombres y sus GPAs
-
Así que para finalizar ponemos un
-
gran paréntesis alrededor aquí y
-
le aplicamos
-
el operador proyección para obtener
-
el nombre del estudiante y el GPA
-
Y esto es una expresión
-
del álgebra relacional que produce la consulta
-
que hemos escrito en inglés
-
Ahora que hemos visto como
-
el producto cruz nos permite
-
combinar tuplas y de que después
-
podemos aplicarles condiciones de selección para
-
obtener un resultado que tenga significado
-
esto hace que el álgebra relacional
-
incluya un operador llamado
-
el "natural join" que es
-
usado para exactamente el propósito descrito
-
Lo que el natural join hace es
-
que realiza el producto cruz
-
pero después busca igualdad
-
en los atributos que tengan el mismo nombre
-
Así si configuramos nuestro
-
esquema apropiadamente, por ejemplo
-
que tenemos un id de estudiante y otro aquí
-
significan la misma cosa
-
y cuando aplicamos el
-
producto cruz este sólo
-
va a combinar las tuplas donde el id del estudiante sea el mismo
-
Y aún mas, sí agregamos
-
universidad, podemos
-
ver que tenemos el nombre de universidad aquí y aquí también
-
sí combinamos las tuplas de universidad y "apply"
-
combinaremos sólo las tuplas que esten hablando de la misma universidad
-
Ahora en adición, una cosa más
-
que esto hace es
-
quita esos atributos que tienen el mismo nombre
-
así una vez que combinamos
-
por ejemplo, estudiantes y "appy"
-
con el "natural join" sólo
-
combinaremos tuplas donde los
-
SID de estudiante y los SID de "apply" sean el mismo
-
Por lo que no necesitamos mantener dos
-
copias de lo aquellas
-
columnas porque los valores siempre serán los mismos
-
así el operador natural join
-
se escribe usando un símbolo como moño
-
esa es tan sólo la convención
-
lo encontraras en tus programas editores de texto, sí buscas cuidadosamente.
-
así que hagamos algunos ejemplos.
-
Regresemos a nuestra misma
-
consulta donde estábamos buscando
-
los nombres y GPAs de los estudiantes
-
de grandes preparatorias quienes se registraron para la carrera CS y que fueron rechazados.
-
Así que ahora en lugar de usar
-
el producto cruz vamos a
-
usar el natural join, el cual como dije se escribe con un símbolo similar a moño
-
que nos permite
-
hacer, una vez hecho el natural join,
-
esto es que no tenemos
-
que escribir la condición, que especifique
-
la igualdad de esos dos
-
atributos, porque este lo hará por si mismo
-
y una vez que lo hemos hecho eso
-
todo lo que necesitamos hace es
-
aplicarlo al resto de nuestras condiciones.
-
la cual fue que la preparatoria
-
sea más grande que 1000 y que la carrera
-
sea igual CS y que la decisión
-
sea rechazados, otra vez
-
llamaremos a eso R, después
-
una vez que sólo hemos obtenido el nombre
-
y GPAs, escribimos los
-
nombres de estudiantes y GPA
-
bien
-
y ese es el resultado de la consulta usando un natural join
-
así, como puedes ver este es un
-
poco más simple que la original
-
con el producto cruz y por configurar
-
el esquema correctamente, el natural join puede ser útil
-
Ahora agreguemos una complicación más a nuestra consulta
-
Supongamos que sólo estamos interesados
-
en los registros a universidades en las que la cantidad de alumnos sea mayor a 20,000
-
hasta ahora
-
en nuestra expresión nos referimos a
-
la relación de estudiantes y la de "apply"
-
pero no hemos usado la relación de universidades
-
pero sí queremos tener un
-
filtro sobre la cantidad de alumnos, vamos a tener
-
que traer la relación de universidades a escena
-
esto podría volverse más fácil de lo que piensas
-
Tan sólo borremos un par
-
de nuestros parámetros aquí y lo que
-
vamos a hacer es que
-
vamos a juntar
-
la relación de universidades, con las dos relaciones que ya tenemos
-
Ahora técnicamente el natural
-
join es un operador binario, las personas
-
frecuentemente lo usan sin paréntesis
-
porque es asociativo,
-
Podríamos agregarlo y después estaría en buena forma
-
Ahora que ya hemos juntado las tres relaciones
-
y recordemos que el natural join automáticamente
-
busca los atributos que comparten el mismo nombre
-
muy específicamente, el nombre
-
de la universidad aquí va a ser
-
igual al nombre de universidad de la relación "apply" también
-
Ahora una vez que hemos hecho esto, tenemos toda la información que necesitamos.
-
Sólo tenemos que agregar una
-
condición de filtro más, la cual es
-
que la cantidad de alumnos de las universidades sea mayor a 20,000
-
y con esto, ya tenemos nuestra consulta
-
Para resumir el
-
natural join , el natural join combina relaciones
-
Esto automáticamente pone valores iguales
-
cuando los nombres de atributos
-
son los mismos y después elimina las columnas duplicadas
-
El natural join de hecho no
-
agrega ningún poder expresivo al álgebra relacional
-
podemos reescribir el natural join sin usar el producto cruz
-
sólo permitanme reescribirla aquí
-
sí tenemos, y ahora voy
-
a usar el caso general de dos expresiones
-
Una expresión , natural join
-
con otra expresión, que es
-
de hecho equivalente a hacer
-
una proyección sobre el
-
esquema de la primera
-
expresión - sólo
-
la llamare E1 ahora unión
-
el esquema de la segunda expresión
-
Esta es un unión real, así esto
-
significa que sí tenemos dos copias
-
sólo nos quedamos con una de ellas
-
sobre la selección, Ahora vamos
-
a poner todos los atributos compartidos
-
de la primera expresión para
-
ser igual a los atributos compartidos de la segunda
-
Así sólo escribo E!, A1
-
igual a E2, A1
-
y E1, A2 iguales a E2.A2
-
Ahora estos son caso en los que
-
una vez más, los atributos tiene el mismo nombre y así
-
así que ponemos todo igual
-
y esa es aplicada sobre
-
la expresión 1 producto cruz 2
-
así otra vez, el natural join
-
no nos va a dar
-
poder expresivo adicional, pero es una muy conveniente notación
-
El último operador que voy a
-
cubrir en este vídeo es el operador Theta Join
-
Al igual que el natural join, el Theta join es
-
de hecho una abreviatura que no agrega poder expresivo al lenguaje
-
Permitanme escribir esto
-
El operador theta join toma
-
dos expresiones y las combina
-
con operador del símbolo de moño
-
pero con un sub-índice theta
-
Aquel Theta es una condición
-
Esta condición en el estilo
-
de las condiciones en el operador seleccionar
-
y que este de hecho dice
-
de hecho es muy simple
-
es equivalente a aplicar
-
la condición Theta al
-
producto cruz de dos expresiones
-
así podrías preguntarte por qué
-
menciono el operador Theta join
-
y la razón por la que
-
lo menciono es porque la mayoria
-
de las sistemas administradores de bases de datos implementan
-
el theta join como una operación básica
-
para combinar relaciones
-
así el operador básico que
-
toma dos relaciones, y que combina todas las tuplas
-
pero que sólo mantiene las combinaciones
-
que satisface la condición theta
-
frecuentemente cuando le hablas
-
a las personas quienes construyen sistemas de bases de datos o que
-
usan bases de datos, cuando ellos
-
usan la palabra join, ellos quieren decir el theta join
-
así, concluyendo, el álgebra relacional es un lenguaje formal
-
Este opera sobre conjuntos de
-
relaciones y produce relaciones como resultado
-
La consulta más simple es tan sólo
-
el nombre de la relación y
-
los operadores son usados
-
para filtrar relaciones, rebanarlas o combinarlas
-
Hasta ahora hemos aprendido
-
sobre el operador seleccionar para seleccionar filas
-
el operador proyección para seleccionar
-
columnas, el operador producto cruz
-
para combinar todo posible
-
par de tuplas de las dos
-
relaciones y después dos
-
abreviaturas, el natural join
-
el cual es una muy útil forma de combinar
-
relaciones quitando ciertas columnas similares
-
y el operador theta join.
-
En el siguiente vídeo aprenderemos
-
algunos operadores adicionales del álgebra
-
relacional y también algunas notaciones
-
alternativas para expresiones del álgebra relacional.