Você está na página 1de 18

Facultad de Informática – Universidad Nacional de La Plata www.info.unlp.edu.

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:

Supongamos que la tabla USUARIO tiene los siguientes datos:

userId username apellido nombre tipoDoc nroDoc depId


1 jperez Perez Jorge dni 1234 1
2 prodriguez Rodriguez Pedro dni 4567 2
3 mgonzalez Gonzalez Maria dni 4456 3
4 crodriguez Rodriguez Cristina dni 1765 3
5 lperez Perez Luis dni 5544 4

Veamos un ejemplo de consulta donde se use el operador de selección.


Consulta: Seleccionar los usuarios que tienen apellido “Perez”.

Página 1 de 18
Facultad de Informática – Universidad Nacional de La Plata www.info.unlp.edu.ar
Bases de Datos 1.

RESULTADO   apellido= “Perez” (USUARIO)

Según los datos cargados en la tabla USUARIO se obtiene como resultado de la consulta
las siguientes tuplas:

userId username apellido nombre tipoDoc nroDoc depId


1 jperez Perez Jorge dni 1234 1
5 lperez Perez Luis dni 5544 4

 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:

Supongamos que la tabla USUARIO tiene los siguientes datos:

userId username apellido nombre tipoDoc nroDoc depId


1 jperez Perez Jorge dni 1234 1
2 prodriguez Rodriguez Pedro dni 4567 2
3 mgonzalez Gonzalez Maria dni 4456 3
4 crodriguez Rodriguez Cristina dni 1765 3
5 lperez Perez Luis dni 5544 4

Veamos un ejemplo de consulta donde se use el operador de proyección.

Consulta: Hallar el nombre, apellido y numero de documento de todos los usuarios.

RESULTADO   nombre,apellido,nroDoc (USUARIO)

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:

nombre apellido nroDoc


Jorge Perez 1234
Pedro Rodriguez 4567
Maria Gonzalez 4456
Cristina Rodriguez 1765
Luis Perez 5544
 Producto Cartesiano X

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

Veamos un ejemplo de consulta donde se use el operador de producto cartesiano.

Consulta: Combinar la información de las dependencias con la información de los


empleados.

RESULTADO  (USUARIO X DEPENDENCIA)

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.

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 1 UNLP
3 mgonzalez Gonzalez Maria dni 4456 3 1 UNLP
4 crodriguez Rodriguez Cristina dni 1765 3 1 UNLP
5 lperez Perez Luis dni 5544 4 1 UNLP
Fac. de
1 jperez Perez Jorge dni 1234 1 2 Informática
Fac. de
2 prodriguez Rodriguez Pedro dni 4567 2 2 Informática
Fac. de
3 mgonzalez Gonzalez Maria dni 4456 3 2 Informática
Fac. de
4 crodriguez Rodriguez Cristina dni 1765 3 2 Informática
Fac. de
5 lperez Perez Luis dni 5544 4 2 Informática
Fac.
1 jperez Perez Jorge dni 1234 1 3 Agronomía
Fac.
2 prodriguez Rodriguez Pedro dni 4567 2 3 Agronomía
Fac.
3 mgonzalez Gonzalez Maria dni 4456 3 3 Agronomía
Fac.
4 crodriguez Rodriguez Cristina dni 1765 3 3 Agronomía
Fac.
5 lperez Perez Luis dni 5544 4 3 Agronomía
Fac. de
1 jperez Perez Jorge dni 1234 1 4 Economía
Fac. de
2 prodriguez Rodriguez Pedro dni 4567 2 4 Economía
Fac. de
3 mgonzalez Gonzalez Maria dni 4456 3 4 Economía
Fac. de
4 crodriguez Rodriguez Cristina dni 1765 3 4 Economía
Fac. de
5 lperez Perez Luis dni 5544 4 4 Economía

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.

 Producto Natural |X|

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

Veamos un ejemplo de consulta donde se use el operador de producto natural.

Consulta: Combinar la información de las dependencias con la información de los


empleados.

RESULTADO  (USUARIO |X| DEPENDENCIA)

Según los datos cargados en las tablas USUARIO y DEPENDENCIA se obtiene como
resultado de la consulta las siguientes tuplas:

userId username apellido nombre tipoDoc nroDoc depId nombreDep


1 jperez Perez Jorge dni 1234 1 UNLP
Fac. de
2 prodriguez Rodriguez Pedro dni 4567 2 Informática
Fac.
3 mgonzalez Gonzalez Maria dni 4456 3 Agronomía
Fac.
4 crodriguez Rodriguez Cristina dni 1765 3 Agronomía
Fac. de
5 lperez Perez Luis dni 5544 4 Economía

Notar: La combinación de tuplas de ambas tablas se hacen por el atributo depId.

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

Donde condición es la condición de igualdad de atributos por la cual se hace el producto


natural.

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

Consulta: Hallar la descripción de cada perfil que desarrolla cada usuario.

RESULTADO  (PER_USR |X| appId=IdApp and perfilad=IdPerfil PERFIL)

Según los datos cargados en las tablas PER_USR y PERFIL se obtiene como resultado de
la consulta las siguientes tuplas:

appId perfilId userId descripcion


1 3 1 operador
2 2 2 profesor
2 3 3 jtp
1 2 3 consulta
3 5 3 tester
3 2 4 project manager
3 4 5 developer

 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:

Supongamos que la tabla PER_USR tiene los siguientes datos:

appId perfilId userId


1 3 1
2 2 2
2 3 3
1 2 3
3 5 3
3 2 4
3 4 5

Veamos un ejemplo de consulta donde se use el operador de resta.

Consulta: Determinar los usuarios que sólo tienen asignada la aplicación con identificador
2, es decir el atributo de la tabla appId = 2.

USR_NO_APP2: Los usuarios que no tienen asignada la aplicación con identificador 2.

USR_NO_APP2   useId ( appId <> 2 (PER_USR))

USR_ASIG_APP: Los usuarios asignados a aplicaciones.

USR_ASIG_APP   useId (PER_USR)

RESULTADO  USR_ASIG_APP – USR_NO_APP2

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

Al hacer la proyección por el userId quedan las siguientes tuplas en USR_NO_APP2:

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

Al ejecutarse la resta, en RESULTADO queda la siguiente tupla:

userId
2

Supongamos que no se hubieran hecho las proyecciones correspondientes y la consulta se


hubiera resuelto de la siguiente manera:

USR_NO_APP2_SIN_PROYECCION: Los usuarios que no tienen asignada la aplicación


con identificador 2.

USR_NO_APP2_SIN_PROYECCION   appId <> 2 (PER_USR)

RESULTADO  PER_USR – USR_NO_APP2_SIN_PROYECCION

La resta se realiza entre los siguientes datos contenidos en PER_USR y


USR_NO_APP2_SIN_PROYECCION:

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

En RESULTADO quedan las siguientes tuplas luego de ejecutar la resta:

appId perfilId userId


2 2 2
2 3 3

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

Veamos un ejemplo de consulta donde se use el operador de intersección.

Consulta: Determinar los usuarios que tienen la aplicación “gestor de proyectos” y “gestor
de cátedras” independientemente de su perfil.

APP_PROY: Los usuarios que tienen asignada la aplicación “gestor de proyectos”.

APP_PROY   userId ( nombre = “gestor de proyectos” (APLICACION ) |X| PER_USR)


APP_CAT: Los usuarios que tienen asignada la aplicación “gestor de cátedras”.

APP_CAT   userId (  nombre = “gestor de cátedras” (APLICACION) |X| PER_USR)

RESULTADO  APP_CAT   APP_PROY


Analicemos la primera subconsulta (APP_PROY). 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:

appId nombreAp url logo


3 gestor de proyectos /proyectos/index.jsp proyectos.png

Esta tupla se usa para hacer el producto natural con PER_USR quedando como resultado
del producto natural las siguientes tuplas:

nombreAp url logo appId perfilId userId


gestor de proyectos /proyectos/index.jsp proyectos.png 3 5 3
gestor de proyectos /proyectos/index.jsp proyectos.png 3 2 4
gestor de proyectos /proyectos/index.jsp proyectos.png 3 4 5

Al hacer la proyección de estas tuplas por el userId queda asignada a la subconsulta


APP_PROY la siguiente tabla:

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:

appid nombreAp url logo


2 gestor de cátedras /catedras/index.jsp catedras.png

Esta tupla se usa para hacer producto natural con PER_USR. Como resultado del producto
natural quedan las siguientes tuplas:

nombreAp url logo appId perfilId userId


gestor de cátedras /catedras/index.jsp catedras.png 2 2 2
gestor de cátedras /catedras/index.jsp catedras.png 2 3 3

Al hacer la proyección de estas tuplas por el userId queda asignada a la subconsulta


APP_CAT la siguiente tabla:

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

Luego de la intersección, en RESULTADO queda la siguiente tupla:

userId
3

Supongamos que tanto para APP_PROY y APP_CAT no se hubieran hecho las


proyecciones correspondientes y la consulta se hubiera resuelto de la siguiente manera:

APP_PROY_SIN_PROYECCION: Los usuarios que tienen asignada la aplicación “gestor


de proyectos”.

Página 11 de 18
Bases de Datos – Maestria de Ingeniería de Software-

APP_PROY_SIN_PROYECCION   nombre = “gestor de proyectos” (APLICACION) |X| PER_USR

APP_CAT_SIN_PROYECCION: Los usuarios que tienen asignada la aplicación “gestor de


cátedras”.

APP_CAT_SIN_PROYECCION   nombre = “gestor de cátedras” (APLICACION) |X| PER_USR


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:

appId nombreAp url logo


3 gestor de proyectos /proyectos/index.jsp proyectos.png

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

nombreAp url logo appId perfilId userId


gestor de proyectos /proyectos/index.jsp proyectos.png 3 5 3
gestor de proyectos /proyectos/index.jsp proyectos.png 3 2 4
gestor de proyectos /proyectos/index.jsp proyectos.png 3 4 5

Veamos ahora la segunda subconsulta (APP_CAT_SIN_PROYECCION). 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:

appid nombreAp url logo


2 gestor de cátedras /catedras/index.jsp catedras.png

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:

nombreAp url logo appId perfilId userId


gestor de cátedras /catedras/index.jsp catedras.png 2 2 2
gestor de cátedras /catedras/index.jsp catedras.png 2 3 3

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

Veamos un ejemplo de consulta donde se use el operador de unión.

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_PROY: Los usuarios que tienen asignada la aplicación “gestor de proyectos”.

APP_PROY   userId ( nombre = “gestor de proyectos” (APLICACION ) |X| PER_USR)

APP_CAT: Los usuarios que tienen asignada la aplicación “gestor de cátedras”.

APP_CAT   userId (  nombre = “gestor de cátedras” (APLICACION) |X| PER_USR)

RESULTADO  APP_CAT  APP_PROY


Las subconsultas APP_PROY y APP_CAT quedan con los siguientes tuplas (Notar: que son
las mismas subconsultas que se especificaron para la intersección, donde se detallo como se obtenían los
datos de cada una de las subconsultas paso por paso):

APP_CAT APP_PROY
userId userId
2 3
3 4
5

Luego de realizar la operación de unión, en RESULTADO quedan las siguientes tuplas:

userId
2
3
4
5

Supongamos que tanto para APP_PROY y APP_CAT no se hubieran hecho las


proyecciones correspondientes y la consulta se hubiera resuelto de la siguiente manera:

APP_PROY_SIN_PROYECCION: Los usuarios que tienen asignada la aplicación “gestor


de proyectos”.

APP_PROY_SIN_PROYECCION   nombre = “gestor de proyectos” (APLICACION) |X| PER_USR

APP_CAT_SIN_PROYECCION: Los usuarios que tienen asignada la aplicación “gestor de


cátedras”.

APP_CAT_SIN_PROYECCION   nombre = “gestor de cátedras” (APLICACION) |X| PER_USR


RESULTADO  APP_CAT_SIN_PROYECCION  APP_PROY_SIN_PROYECCION

Página 14 de 18
Bases de Datos – Maestria de Ingeniería de Software-

Las subconsultas APP_CAT_SIN_PROYECCION y APP_PROY_SIN_PROYECCION


quedan con los siguientes tuplas (Notar: que son las mismas subconsultas que se especificaron para la
intersección, donde se detallo como se obtenían los datos de cada una de las subconsultas paso por paso):

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

Luego de realizar la operación de unión, en RESULTADO quedan las siguientes tuplas:

nombreAp url logo appId perfilId userId


gestor de cátedras /catedras/index.jsp catedras.png 2 2 2
gestor de cátedras /catedras/index.jsp catedras.png 2 3 3
gestor de proyectos /proyectos/index.jsp proyectos.png 3 5 3
gestor de proyectos /proyectos/index.jsp proyectos.png 3 2 4
gestor de proyectos /proyectos/index.jsp proyectos.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

Veamos un ejemplo de consulta donde se use el operador de división.

Consulta: Determinar los usuarios que tienen asignadas todas las aplicaciones
independientemente del perfil que tengan en cada aplicación.

ID_APPS: Los identificadores de todas las aplicaciones.

ID_APPS   appId (APLICACION)

USR_APPS: Las aplicaciones asignadas a cada usuario independientemente del perfil.

USR_APPS   userId,appId (PER_USR)

RESULTADO  USR_APPS % ID_APPS

Las subconsultas USR_APPS y ID_APPS quedan con los siguientes tuplas:

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

Supongamos que al resolver la consulta no se hubiera hecho la proyección adecuada


PER_USR y la resolución hubiera sido la siguiente:

ID_APPS: Los identificadores de las aplicaciones.

ID_APPS   appId (APLICACION)

RESULTADO  PER_USR % ID_APPS

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.

Agreguemos datos (para ver el funcionamiento de la división) a la tabla PER_USR para


notar como influye tener el atributo perfilId como parte de la división. Supongamos que
agregamos datos para que el usuario con userId 3 cumpla con tener todas las aplicaciones
con todos los perfiles.

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

Notar: la diferencia de la división según los atributos que se proyectan. Si no se hace la


proyección correcta cambia el resultado de la división.

Operador adicional – Renombre de tablas 

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:

Se tiene la tabla USUARIO definida de la siguiente manera:

USUARIO (useId,username,apellido,nombre,tipoDoc,nroDoc,depId)

Supongamos que se necesita que la tabla USUARIO se llame U, entonces se usa el


operador de renombre de la siguiente manera:

 (USUARIO)
U

Página 18 de 18

Você também pode gostar