Composición (Join)

Una composición (Join en inglés) es una restricción del producto cartesiano, en la relación de salida sólo se incluyen las tuplas que cumplan una determinada condición.

La condición que se usa más frecuentemente es la igualdad entre dos atributos, uno de cada tabla.

<relación1>[<condición>]<relación2>

Veamos un ejemplo. Partimos de dos relaciones:

tabla1(id, nombre, apellido)
tabla2(id, número)
tabla1
id  nombre     apellido
15  Fulginio   Liepez
26  Cascanio   Suanchiez
 
tabla2
id   número
15   12345678
26   21222112
15   66525425

La composición de estas dos tablas, para una condición en que 'id' sea igual en ambas sería:

tabla1[tabla1.id = tabla2.id]tabla2
id  nombre     apellido   t2.id   número
15  Fulginio   Liepez     15      12345678
26  Cascanio   Suanchiez  26      21222112
15  Fulginio   Liepez     15      66525425

Composición natural

Cuando la condición es la igualdad entre atributos de cada tabla, la relación de salida tendrá parejas de columnas con valores iguales, por lo tanto, se podrá eliminar siempre una de esas columnas. Cuando se eliminan, el tipo de composición se denomina composición natural.

El grado, por lo tanto, en una composición natural es n+m-i, siendo i el número de atributos comparados entre ambas relaciones. La cardinalidad de la relación de salida depende de la condición.

Si sólo se compara un atributo, el grado será n+m-1, si se comparan dos atributos, el grado será n+m-2, y generalizando, si se comparan i atributos, el grado será n+m-i.

En el ejemplo anterior, si hacemos una composición natural, la columna t2.a1 no aparecería, ya que está repetida:

La composición natural de estas dos tablas, para una condición en que 'id' sea igual en ambas sería:

tabla1[tabla1.id = tabla2.id]tabla2
id  nombre     apellido   número
15  Fulginio   Liepez     12345678
26  Cascanio   Suanchiez  21222112
15  Fulginio   Liepez     66525425

Podemos hacer una composición natural en la que intervengan dos atributos.

tabla1(x, y, nombre)
tabla2(x, y, número)
tabla1
x  y   nombre
A  4   Fulginio
A  6   Cascanio
B  3   Melania
C  4   Juaninia
C  7   Antononio
D  2   Ferninio
D  5   Ananinia
 
tabla2
x  y  número
A  3  120
A  6  145
B  2  250
B  5  450
C  4  140
D  2  130
D  5  302

Si la condición es que tanto 'x' como 'y' sean iguales en ambas tablas, tendríamos:

tabla1[tabla1.x = tabla2.x Y tabla1.y = tabla2.y]tabla2
x  y   nombre   número
A  6   Cascanio 145
C  4   Juaninia 140
D  2   Ferninio 130
D  5   Ananinia 302

Unión

También se trata de un operador binario.

Una unión es una suma. Ya sabemos que para poder sumar, los operandos deben ser del mismo tipo (no podemos sumar peras y limones), es decir, las relaciones a unir deben tener el mismo número de atributos, y además deben ser de dominios compatibles. El grado de la relación resultante es el mismo que el de las relaciones a unir, y la cardinalidad es la suma de las cardinalidades de las relaciones.

<relación1> U <relación2>

Por ejemplo, tengamos estas tablas:

tabla1(id, nombre, apellido)
tabla2(id, nombre, apellido)
tabla1
id    nombre       apellido
15    Fernandio    Garcidia
34    Augustido    Lipoez
12    Julianino    Sianchiez
43    Carlanios    Pierez
 
tabla2
id    nombre       apellido
44    Rosinia      Ortiegaz
63    Anania       Pulpez
55    Inesiana     Diominguez

La unión de ambas tablas es posible, ya que tienen el mismo número y tipo de atributos:

tabla1 U tabla2
id    nombre       apellido
15    Fernandio    Garcidia
34    Augustido    Lipoez
12    Julianino    Sianchiez
43    Carlanios    Pierez
44    Rosinia      Ortiegaz
63    Anania       Pulpez
55    Inesiana     Diominguez

Intersección

El operador de intersección también es binario.

Para que dos relaciones se puedan interseccionar deben cumplir las mismas condiciones que para que se puedan unir. El resultado es una relación que contendrá sólo las tuplas presentes en ambas relaciones.

<relación1> intersección <relación2>

Por ejemplo, tengamos estas tablas:

tabla1(id, prenda, color)
tabla2(id, prenda, color)
tabla1
id    prenda    color
10    Jersey    Blanco
20    Jersey    Azul
30    Pantalón  Verde
40    Falda     Roja
50    Falda     Naranja
 
tabla2
id    prenda    color
15    Jersey    Violeta
20    Jersey    Azul
34    Pantalón  Amarillo
40    Falda     Roja
52    Falda     Verde

Es posible obtener la intersección de ambas relaciones, ya que tienen el mismo número y tipo de atributos:

tabla1 intersección tabla2
id    prenda    color
20    Jersey    Azul
40    Falda     Roja

Diferencia

Otro operador binario más.

Los operandos también deben cumplir las mismas condiciones que para la unión o la intersección. El resultado es una relación que contiene las tuplas de la primera relación que no estén presentes en la segunda.

<relación1> - <relación2>

Por ejemplo, tengamos estas tablas:

tabla1(id, prenda, color)
tabla2(id, prenda, color)
tabla1
id    prenda    color
10    Jersey    Blanco
20    Jersey    Azul
30    Pantalón  Verde
40    Falda     Roja
50    Falda     Naranja
 
tabla2
id    prenda    color
15    Jersey    Violeta
20    Jersey    Azul
34    Pantalón  Amarillo
40    Falda     Roja
52    Falda     Verde

Es posible obtener la diferencia de ambas relaciones, ya que tienen el mismo número y tipo de atributos:

tabla1 - tabla2
id    prenda    color
10    Jersey    Blanco
30    Pantalón  Verde
50    Falda     Naranja

División

La operación inversa al producto cartesiano.

Este tipo de operación es poco frecuente, las relaciones que intervienen como operandos deben cumplir determinadas condiciones, de divisibilidad, que hace difícil encontrar situaciones en que se aplique.