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
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
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
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
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
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.
© Enero de 2005 Salvador Pozo, salvador@conclase.net