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 y número = número, y la relación R resultante será:
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 T y 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 T y 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 T y S, que se indica como T *P S, conserva en el resultado todas las tuplas de T y todas las tuplas de S.
Las tuplas de una relación T que se conservan en el resultado R 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 R 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 R 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 R resultante será:
En este caso, en la relación resultante obtenemos a todos los empleados de producción y también todos los despachos.