5. El algebra relacional
5. El algebra relacional Carlos 8 June, 2009 - 11:42Consultad 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 | |
|
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:04Las 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 y 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 y EMPLEADOS_PROD porque sus tuplas se parecen. En cambio, no se podrá hacer la unión de las relaciones EMPLEADOS_ADM y 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 T y S son relaciones compatibles si:
•Tienen el mismo grado.
•Se puede establecer una biyección entre los atributos de T y los atributos de S que hace corresponder a cada atributo Ai de T un atributo Aj de S, de modo que se cumple que dominio(Ai) = dominio(Aj).
Ejemplo de relaciones compatibles
Las relaciones EMPLEADOS_ADM y 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 y 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 R que tenga a todos los empleados de la empresa del ejemplo anterior, llevaremos a cabo la unión de las relacionesEMPLEADOS_ADM y 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 y 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 y 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 R 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 y EMPLEADOS_PROD de la forma siguiente:
R := EMPLEADOS_ADM – EMPLEADOS_PROD
Entonces la relación R 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 y 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:10Las 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 R 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 y 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 R 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:
• A := EDIFICIOS_EMP(supmediadesp > 12);
• B := DESPACHOS * A;
• R := 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:16Para 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.