5. El algebra relacional

5. El algebra relacional Carlos 8 June, 2009 - 11:42
Consultad el apartado 3 de esta unidad didáctica.

Como ya hemos comentado en el apartado dedicado a las operaciones del modelo relacional, el álgebra relacional se inspira en la teoría de conjuntos para especificar consultas en una base de datos relacional.

Para especificar una consulta en álgebra relacional, sean conjuntistas o específicamente relacionales se estudian en los subapartados 5.1 y 5.2 de esta unidad. preciso definir uno o más pasos que sirven para ir construyendo, mediante operaciones de álgebra relacional, una nueva relación que contenga los datos que responden a la consulta a partir de las relaciones almacenadas. Los lenguajes basados en el álgebra relacional son procedimentales, dado que los pasos que forman la consulta describen un procedimiento.

La visión que presentaremos es la de un lenguaje teórico y, por lo tanto, incluiremos sólo sus operaciones fundamentales, y no las construcciones que se podrían añadir a un lenguaje comercial para facilitar cuestiones como por ejemplo el orden de presentación del resultado, el cálculo de datos agregados, etc.

Una característica destacable de todas las operaciones del álgebra relacional es que tanto los operandos como el resultado son relaciones. Esta propiedad se denomina cierre relacional.
Implicaciones del cierre relacional          
El hecho de que el resultado de una operación del álgebra relacional sea una nueva relación tiene implicaciones importantes:
1. El resultado de una opera- ción puede actuar como operando de otra operación.
2. El resultado de una operación cumplirá todas las características que ya
conocemos de las relaciones: no-ordenación de las tuplas, ausencia de tuplas repetidas, etc.

Las operaciones del álgebra relacional han sido clasificadas según distintos criterios; de todos ellos indicamos los tres siguientes:

1)  Según se pueden expresar o no en términos de otras operaciones.

a)  Operaciones primitivas: son aquellas operaciones a partir de las cuales podemos definir el resto. Estas operaciones son la unión, la diferencia, el producto cartesiano, la selección y la proyección.

b)  Operaciones no primitivas: el resto de las operaciones del álgebra relacional que no son estrictamente necesarias, porque se pueden expresar en términos  de  las  primitivas;  sin  embargo,  las  operaciones  no  primitivas permiten formular algunas consultas de forma más cómoda. Existen distintas versiones del álgebra relacional, según las operaciones no primitivas que se incluyen. Nosotros estudiaremos las operaciones no primitivas que se utilizan con mayor frecuencia: la intersección y la combinación.

2)  Según el número de relaciones que tienen como operandos:

a)  Operaciones binarias: son las que tienen dos relaciones como operandos. Son binarias todas las operaciones, excepto la selección y la proyección.

b)  Operaciones unarias: son las que tienen una sola relación como operando. La selección y la proyección son unarias.

3)  Según se parecen o no a las operaciones de la teoría de conjuntos:

a)  Operaciones  conjuntistas:  son las que se parecen a las de  la teoría de conjuntos. Se trata de la unión, la intersección, la diferencia y el producto cartesiano.

Las operaciones del álgebra relacional clasificadas según  sean conjuntistas o específicamente relacionales se estudian en los subapartados 5.1 y 5.2 de esta unidad.

b)  Operaciones específicamente relacionales: son el resto de las operaciones; es decir, la selección, la proyección y la combinación.

Como ya hemos comentado anteriormente, las operaciones del álgebra relacional obtienen como resultado una nueva relación. Es decir que si hacemos una operación del álgebra como por ejemplo EMPLEADOS_ADM   EMPLEADOS_PROD para obtener la unión de las relaciones EMPLEADOS_ADM y EMPLEADOS_PROD, el resultado de la operación es una nueva relación que tiene la unión de las tuplas de las relaciones de partida.

Esta nueva relación debe tener un nombre. En principio, consideramos que su nombre es la misma expresión del álgebra relacional que la obtiene; es decir, la misma expresión EMPLEADOS_ADM   EMPLEADOS_PROD. Puesto que este nombre es largo, en ocasiones puede ser interesante cambiarlo por uno más simple. Esto nos facilitará las referencias a la nueva relación, y será especialmente útil en los casos en los que queramos utilizarla como operando de otra operación. Usaremos la operación auxiliar redenominar con este objetivo.

La operación redenominar, que denotaremos con el símbolo :=, permite asignar un nombre R a la relación que resulta de una operación del álgebra relacional; lo hace de la forma siguiente:
                                 R := E,
siendo E la expresión de una operación del álgebra relacional.

En el ejemplo, para dar el nombre EMPLEADOS a la relación resultante de la operación EMPLEADOS_ADM   EMPLEADOS_PROD, haríamos:

EMPLEADOS := EMPLEADOS_ADM   EMPLEADOS_PROD.

Cada operación del álgebra relacional da unos nombres por defecto a los atributos del esquema de la relación resultante, tal y como veremos más adelante.

En algunos casos, puede ser necesario cambiar estos nombres por defecto por otros nombres. Por este motivo, también permitiremos cambiar el nombre de la relación y de sus atributos mediante la operación redenominar.

Utilizaremos también la operación redenominar para cambiar el esquema de una relación. Si una relación tiene el esquema S(B1, B2, ..., Bn) y queremos cambiarlo por R(A1, A2, ..., An), lo haremos de la siguiente forma:
                      R(A1, A2, ..., An) := S(B1, B2, ..., Bn).

A continuación presentaremos un ejemplo que utilizaremos para ilustrar las operaciones  del  álgebra  relacional.  Después  veremos  con  detalle  las  operaciones.

Supongamos que tenemos una base de datos relacional con las cuatro relaciones siguientes:

1)  La relación EDIFICIOS_EMP, que contiene datos de distintos edificios de los que una empresa dispone para desarrollar sus actividades.

2)  La relación DESPACHOS, que contiene datos de cada uno de los despachos que hay en los edificios anteriores.

3)  La relación EMPLEADOS_ADM, que contiene los datos de los empleados de la empresa que llevan a cabo tareas administrativas.

4)  La relación EMPLEADOS_PROD, que almacena los datos de los empleados de la empresa que se ocupan de tareas de producción.

A continuación describimos los esquemas de las relaciones anteriores y sus extensiones en un momento determinado:

•    Esquema y extensión de EDIFICIOS_EMP:

               

EDIFICIOS_EMP
edificio

supmediadesp

Marina 15
Diagonañ 10

•    Esquema y extensión de DESPACHOS:

 

DESPACHOS
edificio número superficie
Marina 120 10
Marina 230 20
Diagonal 120 10
Diagonal 440 10

•    Esquema y extensión de EMPLEADOS_ADM:

 

EMPLEADOS_ADM
DNI nombre apellido edificiodesp númerodesp
40.444.255 Juan García Marina 120
33.567.711 Marta Roca Marina 120

•    Esquema y extensión de EMPLEADOS_PROD:

 

EMPLEADOS_PROD
DNI nombre apellido edificiodesp númerodesp
33.567.711 Marta Roca Marina 120
55.898.425 Carlos Buendía Diagonal 120
77.232.144 Elena Pla Marina 230
21.335.245 Jorge Soler Nulo Nulo
88.999.210 Pedro González Nulo Nulo

Se considera que los valores nulos de los atributos edificiodesp y númerodesp de las relaciones EMPLEADOS_PROD y EMPLEADOS_ADM indican que el empleado correspondiente no tiene despacho.

 

 

5.1. Operaciones conjuntistas

5.1. Operaciones conjuntistas Dataprix 11 December, 2009 - 15:04

Las operaciones conjuntistas del álgebra relacional son la unión, la intersección, la diferencia y el producto cartesiano.

 

5.1.1. Union

5.1.1. Union Dataprix 11 December, 2009 - 15:05

                                         

La unión de las relaciones EMPLEADOS_ADM EMPLEADOS_PROD proporciona una nueva relación que contiene tanto a los empleados de administración como los empleados de producción; se indicaría así: EMPLEADOS_ADM  EMPLEADOS_PROD.

Sólo tiene sentido aplicar la unión a relaciones que tengan tuplas similares.

Por ejemplo, se puede hacer la unión de las relaciones EMPLEADOS_ADM EMPLEADOS_PROD porque sus tuplas se parecen. En cambio, no se podrá hacer la unión de las relaciones EMPLEADOS_ADM DESPACHOS porque, como habéis podido observar en las tablas, las tuplas respectivas son de tipo diferente.

Más concretamente, para poder aplicar la unión a dos relaciones, es preciso que las dos relaciones sean compatibles. Decimos que dos relaciones son relaciones compatibles si:

•Tienen el mismo grado.

•Se puede establecer una biyección entre los atributos de y los atributos de que hace corresponder a cada atributo Ai  de un atributo Aj  de S, de modo que se cumple que dominio(Ai) = dominio(Aj).

Ejemplo de relaciones compatibles

Las relaciones EMPLEADOS_ADM EMPLEADOS_PROD tienen grado 5. Podemos establecer la siguiente biyección entre sus atributos:

•   A DNI de EMPLEADOS_ADM le corresponde DNIemp de EMPLEADOS_PROD.

•   A nombre de EMPLEADOS_ADM le corresponde nombreemp de EMPLEADOS_PROD.

•   A apellido de EMPLEADOS_ADM le corresponde apellidoemp de EMPLEADOS_PROD.

•   A edificiodesp de EMPLEADOS_ADM le corresponde edificiodesp de EMPLEADOS_PROD.

•   A númerodesp de EMPLEADOS_ADM le corresponde edificiodesp de EMPLEADOS_PROD. Además, supondremos que los dominios de sus atributos se han declarado de forma que se cumple que el dominio de cada atributo de EMPLEADOS_ADM sea el mismo que el dominio de su atributo correspondiente enEMPLEADOS_PROD.

Por  todos  estos  factores,  podemos  llegar  a  la  conclusión  de  que  EMPLEADOS_ADM  EMPLEADOS_PROD son relaciones compatibles.

A continuación, pasaremos a definir los atributos y la extensión de la relación resultante de una unión.

 

                                      

No-repetición de tuplas
Notad que en caso de que 
una misma tupla esté en las 
dos relaciones que se unen, 
el resultado de la unión no la 
tendrá repetida. El resultado 
de la unión es una nueva rela-
ción por lo que no puede tener repeticiones de tuplas.

Ejemplo de unión

Si queremos obtener una relación que tenga a todos los empleados de la empresa del ejemplo anterior, llevaremos a cabo la unión de las relacionesEMPLEADOS_ADM EMPLEADOS_PROD de la forma siguiente:

R := EMPLEADOS_ADMEMPLEADOS_PROD.

Entonces la relación R resultante será la reflejada en la tabla siguiente:

El hecho de que los atributos de la relación resultante coincidan con los atributos de la relación que figura en primer lugar en la unión es una convención; teóricamente, también habría sido posible convenir que coincidiesen con los de la relación que figura en segundo lugar.

 

5.1.2. Interseccion

5.1.2. Interseccion Dataprix 11 December, 2009 - 15:07

  

La intersección de las relaciones EMPLEADOS_ADM EMPLEADOS_PROD obtiene una nueva relación que incluye a los empleados que son al mismo tiempo de administración y de producción: se indicaría como EMPLEADOS_ADM EMPLEADOS_PROD.

La intersección, como la unión, sólo se puede aplicar a relaciones que tengan tuplas similares. Para poder hacer la intersección de dos relaciones, es preciso, pues, que las relaciones sean compatibles.

A continuación definiremos los atributos y la extensión de la relación resultante de una intersección.

  

Ejemplo de intersección

Si queremos obtener una relación R que incluya a todos los empleados de la empresa del ejemplo que trabajan tanto en administración como en producción, realizaremos la intersección de las relaciones EMPLEADOS_ADM EMPLEADOS_PROD de la forma siguiente:

R : = EMPLEADOS_ADM EMPLEADOS_PROD.

Entonces, la relación R resultante será:

Observad que se ha tomado la convención de que los atributos de la relación que resulta coincidan con los atributos de la relación que figura en primer lugar.

 

5.1.3. Diferencia

5.1.3. Diferencia Dataprix 11 December, 2009 - 15:07

    

La diferencia EMPLEADOS_ADM menos EMPLEADOS_PROD da como resultado una nueva relación que contiene a los empleados de administración que no son empleados de producción, y se indicaría de este modo: EMPLEADOS_ADM – EMPLEADOS_PROD.

La diferencia, como ocurría en la unión y la intersección, sólo tiene sentido si

se aplica a relaciones que tengan tuplas similares. Para poder realizar la diferencia de dos relaciones es necesario que las relaciones sean compatibles.

A continuación definimos los atributos y la extensión de la relación resultante de una diferencia.

Ejemplo de diferencia

Si queremos obtener una relación con todos los empleados de la empresa del ejemplo que trabajan en administración, pero no en producción, haremos la diferencia de las relaciones EMPLEADOS_ADM EMPLEADOS_PROD de la forma siguiente:

R := EMPLEADOS_ADM – EMPLEADOS_PROD

Entonces la relación resultante será:

 

 

 

5.1.4. Producto cartesiano

5.1.4. Producto cartesiano Dataprix 11 December, 2009 - 15:09

 

        

Si calculamos el producto cartesiano de EDIFICIOS_EMP DESPACHOS, obtendremos una nueva relación que contiene todas las concatenaciones posibles de tuplas de EDIFICIOS_EMP con tuplas de DESPACHOS.

Si se quiere calcular el producto cartesiano de dos relaciones que tienen algún nombre de atributo común, sólo hace falta redenominar previamente los atributos adecuados de una de las dos relaciones. 

A continuación definimos los atributos y la extensión de la relación resultante de un producto cartesiano.


                                                   

* Recordad que T y S no tienen ningún nombre de atributo común.

Ejemplo de producto cartesiano

El producto cartesiano de las relaciones DESPACHOS y EDIFICIOS_EMP del ejemplo se puede hacer como se indica (es necesario redenominar atributos previamente):

EDIFICIOS(nombreedificio, supmediadesp) := EDICIOS_EMP(edificio, supmediadesp).

R := EDIFICIOS x DESPACHOS.

Entonces, la relación R resultante será:

 

      

 

Conviene señalar que el producto cartesiano es una operación que raramente se utiliza de forma explícita, porque el resultado que da no suele ser útil para resolver las consultas habituales.

A pesar de ello, el producto cartesiano se incluye en el álgebra relacional porque es una operación primitiva; a partir de la cual se define otra operación del álgebra, la combinación, que se utiliza con mucha frecuencia.

 

5.2. Operaciones específicamente relacionales

5.2. Operaciones específicamente relacionales Dataprix 11 December, 2009 - 15:10

Las operaciones específicamente relacionales son la selección, la proyección y la combinación.

 

5.2.1. Seleccion

5.2.1. Seleccion Dataprix 11 December, 2009 - 15:11

 

         

Para obtener una relación que tenga todos los despachos del edificio Marina que tienen más de 12 metros cuadrados, podemos aplicar una selección a la relación DESPACHOS con una condición  de  selección  que  sea  edificio  =  Marina  y  superficie  >  12;  se  indicaría  DESPACHOS(edificio = Marina y superficie > 12).

En general, la condición de selección C está formada por una o más cláusulas de la forma:

Ai v,

o bien:

Ai Aj,

donde Ai y Aj son atributos de la relación T, es un operador de comparación* y v es un valor. Además, se cumple que:                                     

•En las cláusulas de la forma Ai v, v es un valor del dominio de Ai.

•En las cláusulas de la forma Ai, Aj, Ai y Aj tienen el mismo dominio.

Las cláusulas que forman una condición de selección se conectan con los siguientes operadores booleanos: “y” (?) y “o” (?).

 

A continuación definimos los atributos y la extensión de la relación resultante de una selección.


Ejemplo de selección

Si queremos obtener una relación con los despachos de la base de datos del ejemplo que están en el edificio Marina y que tienen una superficie de más de 12 metros cuadrados, haremos la siguiente selección:

R := DESPACHOS(edificio = Marina y superficie > 12).

La relación R resultante será:

 

             

5.2.2. Proyeccion

5.2.2. Proyeccion Dataprix 11 December, 2009 - 15:12

            
            
 

 

Para obtener una relación que tenga sólo los atributos nombre y apellido de los empleados de administración, podemos hacer una proyección en la relaciónEMPLEADOS_ADM sobre estos dos atributos. Se indicaría de la forma siguiente: EMPLEADOS_ADM [nombre, apellido].

A continuación definiremos los atributos y la extensión de la relación resultante de una proyección.

 

Ejemplo de proyección

Si queremos obtener una relación R con el nombre y el apellido de todos los empleados de administración de la base de datos del ejemplo, haremos la siguiente proyección:

R := EMPLEADOS_ADM[nombre, apellido].

Entonces, la relación R resultante será:

 

                      

 

5.2.3. Combinacion

5.2.3. Combinacion Dataprix 11 December, 2009 - 15:14

 

         

 

Para conseguir una relación que tenga los datos de cada uno de los empleados de administración junto con los datos de los despachos donde trabajan, podemos hacer una combinación  de  las  relaciones  EMPLEADOS_ADM  y  DESPACHOS,  donde  la  condición  de combinación indique lo siguiente: edificiodesp = edificio y númerodesp = número. La condición de combinación hace que el resultado sólo combine los datos de un empleado con los datos de un despacho si el edificiodesp y el númerodesp del empleado son iguales que
el edificio y el número del despacho, respectivamente. Es decir, la condición hace que los datos de un empleado se combinen con los datos del despacho donde trabaja, pero no con datos de otros despachos.

La combinación del ejemplo anterior se indicaría de la forma siguiente:

EMPLEADOS_ADM[edificiodesp = edificio, númerodesp = número]DESPACHOS.

Si se quiere combinar dos relaciones que tienen algún nombre de atributo común, sólo hace falta redenominar previamente los atributos repetidos de una de las dos.

En general, la condición B de una combinación T[B]S está formada por una o más comparaciones de la forma

Ai Aj,

donde Ai es un atributo de la relación T, Aj es un atributo de la relación S, ? es un operador de comparación y se cumple que Ai Aj tienen el mismo dominio. Las comparaciones de una condición de combinación se separan mediante comas.

A continuación definimos los atributos y la extensión de la relación resultante de una combinación.

Ejemplo de combinación

Supongamos que se desea encontrar los datos de los despachos que tienen una superficie mayor o igual que la superficie media de los despachos del edificio donde están situados. La siguiente combinación nos proporcionará los datos de estos despachos junto con los datos de su edificio (observad que es preciso redenominar previamente los atributos):

  EDIFICIOS(nombreeedficio,supmediadesp) := EDIFICIOS_EMP(edificio, supmediadesp),

R := EDIFICIOS[nombreedificio = edificio, supmediadesp<uperficie] DESPACHOS.

Entonces, la relación R resultante será:
 

Supongamos ahora que para obtener los datos de cada uno de los empleados de administración, junto con los datos del despacho donde trabajan, utilizamos la siguiente combinación:

R := EMPLEADOS_ADM[edificiodesp = edificio, númerodesp = número]DESPACHOS.

La relación R resultante será:

        

          

         

La relación R combina los datos de cada empleado con los datos de su despacho.

En ocasiones, la combinación recibe el nombre de ?-combinación, y cuando todas las comparaciones de la condición de la combinación tienen el operador “=”, se denomina equicombinación.

Según esto, la combinación del último ejemplo es una equicombinación.

Observad  que el  resultado  de  una equicombinación  siempre  incluye  una  o más parejas de atributos que tienen valores idénticos en todas las tuplas.

En el ejemplo anterior, los valores de edificiodesp coinciden con los de edificio, y los valores de númerodesp coinciden con los de número.

Puesto que uno de cada par de atributos es superfluo, se ha establecido una variante  de  combinación  denominada  combinación  natural,  con  el  fin  de eliminarlos.

Ejemplo de combinación natural

Si hacemos:

R := EDIFICIOS_EMP * DESPACHOS,

se considera que la condición es edificio edificio porque edificio es el único nombre de atributo que figura tanto en el esquema de EDIFICIOS_EMP como en el esquema de DESPACHOS.
El resultado de esta combinación natural es:

             

Notad que se ha eliminado uno de los atributos de nombre edificio.

En ocasiones, antes de la combinación natural es necesario aplicar la operación redenominar para hacer coincidir los nombres de los atributos que nos interesa igualar.

Ejemplo de combinación natural con redenominación

Por ejemplo, si queremos obtener los datos de cada uno de los empleados de administración junto con los datos del despacho donde trabajan pero sin repetir valores de atributos superfluos, haremos la siguiente combinación natural, que requiere una redenominación previa:

D(edificiodesp, númerodesp, superficie) := DESPACHOS(edificio, número, superficie),

R := EMPLEADOS_ADM * D.

Entonces, la relación resultante será:

 

          

 

 

 

5.3. Secuencias de operaciones del algebra relacional

5.3. Secuencias de operaciones del algebra relacional Dataprix 11 December, 2009 - 15:15

  

             

Ejemplo de utilización de secuencias de operaciones

Para obtener el nombre y el apellido de los empleados, tanto de administración como de producción, es necesario hacer una unión de EMPLEADOS_ADM yEMPLEADOS_PROD, y después  hacer  una  proyección  sobre  los  atributos  nombre  y  apellido.  La operación  se  puede expresar de las formas siguientes:

a) Se puede utilizar una sola expresión:

R := (EMPLEADOS_ADM EMPLEADOS_PROD) [nombre, apellido].

b) O bien podemos expresarlo en dos pasos:

•   EMPS := EMPLEADOS_ADMEMPLEADOS_PROD;

•   R := EMPS[nombre, apellido]

En los casos en que una consulta requiere efectuar muchas operaciones, resulta más sencilla la segunda alternativa, porque evita expresiones complejas.

Otros ejemplos de consultas formuladas con secuencias de operaciones

Veamos algunos ejemplos de consultas en la base de datos formuladas con secuencias de operaciones del álgebra relacional.

1) Para obtener el nombre del edificio y el número de los despachos situados en edificios en los que la superficie media de estos despachos es mayor que 12, podemos utilizar la siguiente secuencia de operaciones:

•   := EDIFICIOS_EMP(supmediadesp > 12);
•   := DESPACHOS * A;
•   := B[edificio, número]

2) Supongamos ahora que se desea obtener el nombre y el apellido de todos los empleados
(tanto de administración como de producción) que están asignados al despacho 120 del edificio Marina. En este caso, podemos utilizar la siguiente secuencia:

•   A := EMPLEADOS_ADM ? EMPLEADOS_PROD;
•   B := A(edificiodesp = Marina y númerodesp = 120);
•   R := B[nombre, apellido].

3) Si queremos consultar el nombre del edificio y el número de los despachos que ningún empleado de administración tiene asignado, podemos utilizar esta secuencia:

   A := DESPACHOS [edificio, número];
•   B := EMPLEADOS_ADM[edificiodesp, númerodesp];
•   R := A – B.

4) Para obtener el DNI, el nombre y el apellido de todos los empleados de administración que tienen despacho, junto con la superficie de su despacho, podemos hacer lo siguiente:

•   A[DNI, nombre, apellido, edificio, número] := EMPLEADOS_ADM[DNI, nombre, apellido, edificiodesp, númerodesp];
•   B := A * DESPACHOS;
•   R := B[DNI, nombre, apellido, superficie].

 

5.4. Extensiones: combinaciones externas

5.4. Extensiones: combinaciones externas Dataprix 11 December, 2009 - 15:16

Para finalizar el tema del álgebra relacional, analizaremos algunas extensiones útiles de la combinación.

Las combinaciones que se han descrito obtienen las tuplas del producto cartesiano de dos relaciones que satisfacen una condición de combinación. Las tuplas de una de las dos relaciones que no tienen en la otra relación una tupla como mínimo con la cual, una vez concatenadas, satisfagan la condición de combinación, no aparecen en el resultado de la combinación, y podríamos decir que sus datos se pierden.

Por ejemplo, si hacemos la siguiente combinación natural (con una redenominación previa): D(edificiodesp, númerodesp, superficie) := DESPACHOS (edificio, número, superficie),

R := EMPLEADOS_PROD * D.

Puesto que se trata de una combinación natural, se considera que la condición de combinación es edificio edificio número número, y la relación resultante será:

 

extensiones_tabla1

Notad que en esta relación R no están los empleados de producción que no tienen despacho asignado (con valores nulos en edificiodesp y númerodesp), y tampoco los despachos que no tienen ningún empleado de producción, porque no cumplen la condición de combinación.

Conviene destacar que las tuplas que tienen un valor nulo para alguno de los atributos que figuran en la condición de combinación se pierden siempre, porque en estos casos la condición de combinación siempre se evalúa a falso.

En algunos casos, puede interesar hacer combinaciones de los datos de dos relaciones sin que haya pérdida de datos de las relaciones de partida. Entonces,
se utilizan las combinaciones externas.

 

            

Estas extensiones también se aplican al caso de la combinación natural entre dos relaciones, T * S, concretamente: 

a)  La combinación natural externa izquierda entre dos relaciones S, que
se indica como T *[ S, conserva en el resultado todas las tuplas de la relación T.

b)  La combinación natural externa derecha entre dos relaciones S, que se indica como T *D S, conserva en el resultado todas las tuplas de la relación S.

c)  Finalmente, la combinación natural externa plena entre dos relaciones S, que se indica como T *P S, conserva en el resultado todas las tuplas de y todas las tuplas de S.

Las tuplas de una relación que se conservan en el resultado de una combinación externa con otra relación S, a pesar de que no satisfacen la condición de combinación, tienen valores nulos en el resultado R para todos los atributos que provienen de la relación S.

Ejemplos de combinaciones naturales externas

1) Si hacemos la siguiente combinación natural derecha (con una redenominación previa): D(edificiodesp, númerodesp, superficie) := DESPACHOS (edificio, número, superficie),

R := EMPLADOS_PROD *D D,

la relación resultante será:

 

 

 

Ahora obtenemos todos los despachos en la relación resultante, tanto si tienen un empleado de producción asignado como si no. Notad que los atributos DNI, nombre y apellido para los despachos que no tienen empleado reciben valores nulos.

2) Si hacemos la siguiente combinación natural izquierda (con una redenominación previa): D(edificiodesp, númerodesp, superficie) := DESPACHOS(edificio, número, superficie),

R := EMPLEADOS_PROD *^[ D,

entonces la relación resultante será:

 

 

 

 

Esta combinación externa nos permite obtener en la relación resultante a todos los empleados de producción, tanto si tienen despacho como si no. Observad que el atributo superficie para los empleados que no tienen despacho contiene un valor nulo.

3) Finalmente, si hacemos la siguiente combinación natural plena (con una redenominación previa):

D(edificiodesp, númerodesp, superficie) := DESPACHOS(edificio, número, superficie),

R:= EMPLEADOS_PROD *P D,

entonces la relación resultante será:

 

 

En este caso, en la relación resultante obtenemos a todos los empleados de producción y también todos los despachos.