Escolar Documentos
Profissional Documentos
Cultura Documentos
ar
Bases de Datos 1.
Álgebra Relacional
Las operaciones del álgebra relacional que usaremos en la materia, son las siguientes:
Selección
Proyección
Producto Cartesiano X
Producto Natural |X|
Diferencia o Resta -
Intersección
Unión
División %
Para definir las operaciones del álgebra relacional usaremos para los ejemplos los siguientes
esquemas:
USUARIO (useId,username,apellido,nombre,tipoDoc,nroDoc,depId)
DEPENDENCIA (depId,nombreDep)
APLICACION (appId,nombreAp,url,logo)
PERFIL(idApp,idPerfil,descripción)
PER_USR (appId,perfilId,userId)
Selección
Operación unaria que dada una condición, selecciona elementos de una tabla. Produce un
subconjunto “horizontal” de la tabla dada. La condición puede ser una expresión booleana en la
que se usan los conectores and, or y el not. Es decir, retorna las tuplas que cumplen con la
condición indicada. Este operador se detalla de la siguiente manera:
condición (R)
Ejemplo:
Página 1 de 18
Facultad de Informática – Universidad Nacional de La Plata www.info.unlp.edu.ar
Bases de Datos 1.
Según los datos cargados en la tabla USUARIO se obtiene como resultado de la consulta
las siguientes tuplas:
Proyección
Operación unaria, dada una lista de atributos produce un corte “vertical” de la tabla, quedándose
sólo con los atributos detallados. Los atributos de la lista se toman de izquierda a derecha. Es
decir, este operador retorna sólo los atributos indicados de todas las tuplas de la tabla. Este
operador se detalla de la siguiente manera:
listaAtributos (R)
Ejemplo:
Página 2 de 18
Facultad de Informática – Universidad Nacional de La Plata www.info.unlp.edu.ar
Bases de Datos 1.
Según los datos cargados en la tabla USUARIO se obtiene como resultado de la consulta
las siguientes tuplas:
Operación binaria de dos tablas R y S, es una relación que incluye todas las tuplas posibles que
se obtienen concatenando cada tupla de R con cada una de las tuplas de S. La concatenación de
una tupla de R (a1, …, am) y una tupla S (am+1, …, am+n) es una tupla (a1,…, am, am+1, …, am+n). Es
decir, este operador retorna una tabla con las columnas de R más las columnas de S. El resultado
son todas las posibles combinaciones de las filas de la primera tabla con las filas de la segunda
tabla. Este operador se detalla de la siguiente manera:
RXS
Tenga en cuenta que para que los resultados tengan una cierta lógica, deberá aplicar una
selección al resultado del producto cartesiano.
Ejemplo:
Supongamos que las tablas USUARIO y DEPENDENCIA tienen los siguientes datos:
USUARIO DEPENDENCIA
userId username apellido nombre tipoDoc nroDoc depId depId nombreDep
1 jperez Perez Jorge dni 1234 1 1 UNLP
2 prodriguez Rodriguez Pedro dni 4567 2 2 Fac. de Informática
3 mgonzalez Gonzalez Maria dni 4456 3 3 Fac. Agronomía
4 crodriguez Rodriguez Cristina dni 1765 3 4 Fac. de Economía
5 lperez Perez Luis dni 5544 4
Según los datos cargados en las tablas USUARIO y DEPENDENCIA se obtiene como
resultado de la consulta las siguientes tuplas:
Página 3 de 18
Facultad de Informática – Universidad Nacional de La Plata www.info.unlp.edu.ar
Bases de Datos 1.
En el resultado hay tuplas que no tienen lógica ya que los datos de un usuario pueden estar
combinando información de una dependencia en la cual no trabaja. Para poder filtrar la
información que no tiene sentido se deberá aplicar una selección al resultado del producto
cartesiano.
Operación binaria que involucra dos tablas R y S, es una operación que incluye todas las tuplas
posibles que se obtienen concatenando cada tupla de R con cada una de las tuplas de S, pero
considerando solo las tuplas que coinciden en el/los atributo/s de igual nombre contenido/s en las
dos tablas. Este operador realiza un producto cartesiano con selección. La selección que realiza
es por igualdad de los nombres de atributos de ambas tablas. Este operador se detalla de la
siguiente manera:
R |X| S
Página 4 de 18
Facultad de Informática – Universidad Nacional de La Plata www.info.unlp.edu.ar
Bases de Datos 1.
Ejemplo:
Supongamos que las tablas USUARIO y DEPENDENCIA tienen los siguientes datos:
USUARIO DEPENDENCIA
userId username apellido nombre tipoDoc nroDoc depId depId nombreDep
1 jperez Perez Jorge dni 1234 1 1 UNLP
2 prodriguez Rodriguez Pedro dni 4567 2 2 Fac. de Informática
3 mgonzalez Gonzalez Maria dni 4456 3 3 Fac. Agronomía
4 crodriguez Rodriguez Cristina dni 1765 3 4 Fac. de Economía
5 lperez Perez Luis dni 5544 4
Según los datos cargados en las tablas USUARIO y DEPENDENCIA se obtiene como
resultado de la consulta las siguientes tuplas:
En el caso de que ninguno de los atributos de las dos tablas involucradas en el producto
natural tengan igual nombre, se debe indicar la condición de igualdad de atributos por la
cual se hace el producto natural. Esto se denota de la siguiente manera:
R |X|condición S
Página 5 de 18
Bases de Datos – Maestria de Ingeniería de Software-
Ejemplo:
Supongamos que las tablas PERFIL y PER_USR tienen los siguientes datos:
PER_USR PER_USR
appId perfilId userId idApp idPerfil descripcion
1 3 1 1 1 administrador
2 2 2 1 2 consulta
2 3 3 1 3 operador
1 2 3 2 1 administrador
3 5 3 2 2 profesor
3 2 4 2 3 jtp
3 4 5 2 4 alumno
3 1 administrador
3 2 project manager
3 3 analist
3 4 developer
5 tester
Según los datos cargados en las tablas PER_USR y PERFIL se obtiene como resultado de
la consulta las siguientes tuplas:
Diferencia o Resta -
Operador binario que retorna las tuplas de la primera tabla que no están en la segunda tabla. Este
operador se detalla de la siguiente manera:
R-S
Página 6 de 18
Bases de Datos – Maestria de Ingeniería de Software-
Ejemplo:
Consulta: Determinar los usuarios que sólo tienen asignada la aplicación con identificador
2, es decir el atributo de la tabla appId = 2.
Veamos las tuplas que quedan en la subconsulta USR_NO_APP2. Primeramente hay que
hacer una selección de las aplicaciones que no tengan identificador 2, quedando las
siguientes tuplas:
appId perfilId userId
1 3 1
1 2 3
3 5 3
3 2 4
3 4 5
userId
1
3
4
5
Página 7 de 18
Bases de Datos – Maestria de Ingeniería de Software-
Ahora veamos la subconsulta USR_ASIG_APP, en este caso se hace una proyección del
userId de la tabla PER_USR quedando las siguientes tuplas:
userId
1
2
3
4
5
Por lo tanto las tuplas de las subconsultas USR_NO_APP2 y USR_ASIG_APP que se usan
para hacer la resta son las siguientes:
USR_ASIG_APP USR_NO_APP2
userId userId
1 1
2 3
3 4
4 5
5
userId
2
Página 8 de 18
Bases de Datos – Maestria de Ingeniería de Software-
PER_USR USR_NO_APP2_SIN_PROYECCION
appId perfilId userId appId perfilId userId
1 3 1 1 3 1
2 2 2 1 2 3
2 3 3 3 5 3
1 2 3 3 2 4
3 5 3 3 4 5
3 2 4
3 4 5
Este resultado no resuelve la consulta planteada que pedía determinar los usuarios que
sólo tienen asignada la aplicación con identificador 2, es decir el atributo de la tabla appId =
2. El usuario 3 no solamente esta asignado a la aplicación con identificador 2, sino también
a la aplicación con identificador 1 y 3.
Notar la importancia de proyectar correctamente cuando se realiza la resta para poder
lograr que la resta tenga sentido.
Importante: La operación de Resta requiere que las tablas involucradas, sean de unión
compatible. Es decir que tengan igual cantidad de atributos y que el atributo i-esimo de la primera
tabla tenga igual dominio que el atributo i-esimo de la segunda tabla para toda i.
Intersección
Operación binaria entre dos tablas R y S que retorna las tuplas que están en ambas tablas. Este
operador se detalla de la siguiente manera:
R S
Ejemplo:
Supongamos que las tablas APLICACION y PER_USR tienen los siguientes datos:
Página 9 de 18
Bases de Datos – Maestria de Ingeniería de Software-
APLICACION PER_USR
appId nombreAp url logo appId perfilId userId
1 rrhh /rrhh/index.jsp rrhh.png 1 3 1
2 gestor de cátedras /catedras/index.jsp catedras.png 2 2 2
3 gestor de proyectos /proyectos/index.jsp proyectos.png 2 3 3
1 2 3
3 5 3
3 2 4
3 4 5
Consulta: Determinar los usuarios que tienen la aplicación “gestor de proyectos” y “gestor
de cátedras” independientemente de su perfil.
Esta tupla se usa para hacer el producto natural con PER_USR quedando como resultado
del producto natural las siguientes tuplas:
Página 10 de 18
Bases de Datos – Maestria de Ingeniería de Software-
userId
3
4
5
Veamos ahora la segunda subconsulta (APP_CAT). La tupla que queda cuando a la tabla
APLICACION se le hace la selección por nombre de aplicación “gestor de cátedras” es la
siguiente:
Esta tupla se usa para hacer producto natural con PER_USR. Como resultado del producto
natural quedan las siguientes tuplas:
userId
2
3
Por lo tanto las subconsultas que se usan para hacer la intersección son APP_PROY y
APP_CAT las cuales tienen las siguientes tuplas:
APP_CAT APP_PROY
userId userId
2 3
3 4
5
userId
3
Página 11 de 18
Bases de Datos – Maestria de Ingeniería de Software-
RESULTADO APP_CAT_SIN_PROYECCION APP_PROY_SIN_PROYECCION
Analicemos la primera subconsulta (APP_PROY_SIN_PROYECCION). La tupla que queda
cuando a la tabla APLICACION se le hace la selección por nombre de aplicación “gestor de
proyectos” es la siguiente:
Esta tupla se usa para hacer el producto natural con PER_USR quedando como resultado
del producto natural las siguientes tuplas en APP_PROY_SIN_PROYECCION
Esta tupla se usa para hacer producto natural con PER_USR. Como resultado del producto
natural quedan las siguientes tuplas en APP_CAT_SIN_PROYECCION:
Por lo tanto las subconsultas que se usan para hacer la intersección son
APP_PROY_SIN_PROYECCION y APP_CAT_SIN_PROYECCION las cuales tienen las
siguientes tuplas:
Página 12 de 18
Bases de Datos – Maestria de Ingeniería de Software-
APP_CAT APP_PROY
nombre app perfil user nombre app perfil use
Ap url logo Id Id Id Ap url logo Id Id rId
gestor de /catedras/i catedr gestor de /proyectos/ proyectos.
cátedras ndex.jsp as.png 2 2 2 proyectos index.jsp png 3 5 3
gestor de /catedras/i catedr gestor de /proyectos/ proyectos.
cátedras ndex.jsp as.png 2 3 3 proyectos index.jsp png 3 2 4
gestor de /proyectos/ proyectos.
proyectos index.jsp png 3 4 5
Una vez realizada la intersección RESULTADO queda vació ya que las tuplas de
APP_PROY_SIN_PROYECCION y APP_CAT_SIN_PROYECCION son disjuntas. Notar la
importancia de proyectar los datos correspondientes para que la intersección funcione
correctamente.
Importante: La operación de Intersección requiere que las tablas involucradas, sean de unión
compatible. Es decir que tengan igual cantidad de atributos y que el atributo i-esimo de la primera
tabla tenga igual dominio que el atributo i-esimo de la segunda tabla para toda i.
Unión
Operación binaria entre dos tablas R y S que retorna las tuplas que están en la primera tabla o en
la segunda tabla. Este operador se detalla de la siguiente manera:
R S
Ejemplo:
Supongamos que las tablas APLICACION y PER_USR tienen los siguientes datos:
APLICACION PER_USR
appId nombreAp url logo appId perfilId userId
1 rrhh /rrhh/index.jsp rrhh.png 1 3 1
2 gestor de cátedras /catedras/index.jsp catedras.png 2 2 2
3 gestor de proyectos /proyectos/index.jsp proyectos.png 2 3 3
1 2 3
3 5 3
3 2 4
3 4 5
Consulta: Determinar los usuarios que tienen la aplicación “gestor de proyectos” o “gestor
de cátedras” independientemente de su perfil.
Página 13 de 18
Bases de Datos – Maestria de Ingeniería de Software-
APP_CAT APP_PROY
userId userId
2 3
3 4
5
userId
2
3
4
5
RESULTADO APP_CAT_SIN_PROYECCION APP_PROY_SIN_PROYECCION
Página 14 de 18
Bases de Datos – Maestria de Ingeniería de Software-
APP_CAT APP_PROY
nombre app perfil user nombre app perfil use
Ap url logo Id Id Id Ap url logo Id Id rId
gestor de /catedras/ catedras. gestor de /proyectos/ proyectos.
cátedras index.jsp png 2 2 2 proyectos index.jsp png 3 5 3
gestor de /catedras/ catedras. gestor de /proyectos/ proyectos.
cátedras index.jsp png 2 3 3 proyectos index.jsp png 3 2 4
gestor de /proyectos/ proyectos.
proyectos index.jsp png 3 4 5
Se puede apreciar que el resultado difiere si se hace la proyección o no. En este caso se
puede apreciar que el userId = 3 aparece en dos tuplas distintas. Notar la importancia de
proyectar correctamente cuando se hace la unión.
Importante: La operación de Unión requiere que las tablas involucradas, sean de unión
compatible. Es decir que tengan igual cantidad de atributos y que el atributo i-esimo de la primera
tabla tenga igual dominio que el atributo i-esimo de la segunda tabla para toda i.
División %
Operación binaria entre dos tablas R y S que retorna las tuplas de la primera tabla que están
relacionadas con todas las tuplas de la segunda tabla. Los atributos del divisor S deben ser un
subconjunto de los atributos de la tabla R y deben tener igual dominio. Este operador se detalla de
la siguiente manera:
R%S
Página 15 de 18
Bases de Datos – Maestria de Ingeniería de Software-
Ejemplo:
Supongamos que las tablas APLICACION y PER_USR tienen los siguientes datos:
APLICACION PER_USR
appid nombreAp url logo appId perfilId userId
1 rrhh /rrhh/index.jsp rrhh.png 1 3 1
2 gestor de cátedras /catedras/index.jsp catedras.png 2 2 2
3 gestor de proyectos /proyectos/index.jsp proyectos.png 2 3 3
1 2 3
3 5 3
3 2 4
3 4 5
Consulta: Determinar los usuarios que tienen asignadas todas las aplicaciones
independientemente del perfil que tengan en cada aplicación.
USR_APPS ID_APPS
userId appId appId
1 1 1
2 2 2
3 1 3
3 2
3 3
4 3
5 3
El usuario 3 es el único que tiene asignada todas las aplicaciones. Por lo tanto al realizar la
operación de división en RESULTADO queda la siguiente tupla:
Página 16 de 18
Bases de Datos – Maestria de Ingeniería de Software-
userId
3
Para este caso se hubiera tenido para la división los siguientes datos:
PER_USR ID_APPS
appId perfilId userId appId
1 3 1 1
2 2 2 2
2 3 3 3
1 2 3
3 5 3
3 2 4
3 4 5
En este caso se estaría pidiendo que cada tupla (userId, perfilId) este combinada con todas
los appId de la tabla ID_APPS. En este caso la división seria vacía. Notar la importancia de
proyectar los atributos correctos en la división ya que la información varía según los
atributos involucrados en la misma.
Página 17 de 18
Bases de Datos – Maestria de Ingeniería de Software-
PER_USR ID_APPS
appId perfilId userId appId
1 3 1 1
2 2 2 2
2 3 3 3
1 2 3
3 5 3
3 2 4
3 4 5
1 1 3
1 3 3
1 4 3
1 5 3
2 1 3
2 2 3
2 4 3
2 5 3
3 1 3
3 2 3
3 3 3
3 4 3
Operador unario que permite renombrar tablas. Este operador puede usarse cuando la misma
tabla esta involucrada en una operación binaria. De esta manera se logra tener nombres distintos
para desambiguar los atributos. Este operador se detalla de la siguiente manera:
(R)S
Ejemplo:
USUARIO (useId,username,apellido,nombre,tipoDoc,nroDoc,depId)
(USUARIO)
U
Página 18 de 18