Las relaciones entre tablas en OpenOffice Base
Una de las grandes ventajas de las bases de datos es que podemos tener toda la información que necesitamos almacenar en varias tablas, relacionadas entre ellas, en lugar de una única tabla enorme con toda la información.
¿Qué conseguimos con esto? Para responder a esta pregunta mejor pongamos un ejemplo: imaginemos que se quiere guardar el género cinematográfico de las películas que se van almacenando. Se podría pensar en añadir una nueva columna a la tabla Peliculas que se llamara Género, de manera que por cada película almacenada también tuviera su género. Esta posible solución se muestra en la figura 4.1.
Si nos fijamos en esta solución podemos ver que se está repitiendo el mismo valor muchas veces, por ejemplo, Ciencia-Ficción aparece en cuatro filas y Drama en otras tantas. Es decir, se está obligando a teclear varias veces el mismo valor lo que, entre otras cosas, puede provocar que en algún momento nos equivoquemos al teclear, y escribamos, por ejemplo, Ciencia-Fusión, y ya tengamos un nuevo género que no corresponde a ninguna película ya que ni siquiera existe (por lo menos, en el momento de escribir esto); es decir, al introducir el mismo valor de forma redundante se está posibilitando que en algún momento lo escribamos mal.
Puede pasarnos también que todos los críticos de cine se pongan de acuerdo y decidan que el género Ciencia-Ficción no tiene un nombre adecuado y que es más adecuado llamarlo Ficción-Científica. Entonces, si se tiene en la tabla Peliculas cuatro películas de ese género, se debe ir una a una cambiando el nombre y con cuidado de no equivocarse al teclear. Quizás si tenemos cuatro películas de este género no nos parezca un gran problema hacer este cambio cuatro veces pero si resulta que se tiene en la colección trescientas películas de este género puede que el problema parezca más importante.
La solución a los problemas anteriores está en separar la información que aparece repetida continuamente en una nueva tabla (ver figuras 4.2 y 4.3) e indicar de alguna forma en nuestra base de datos que hay filas de la tabla Peliculas y de la tabla Generos que están relacionadas (figura 4.4).
Antes de entrar en detalle en las relaciones entre tablas vamos a ver otro ejemplo que nos ayude a comprender aún mejor la necesidad de poder establecer relaciones entre tablas. Vamos a suponer que quisiéramos almacenar información (apellidos, nombre y nacionalidad) acerca de los principales interpretes con cada una de nuestra películas. A pesar de haber creado una tabla Interpretes en la segunda unidad de este curso y, con el conocimiento de bases de datos que tenemos hasta ahora, no nos quedaría otra opción que añadir nuevas columnas a nuestra tabla Peliculas donde guardar la información acerca de sus protagonistas. Es decir, podríamos pensar en una solución como la de la figura 4.5.
Pero esta solución nos deja muchas incógnitas sin resolver. Por ejemplo, si no se conoce el nombre de ninguno de los interpretes de una película se va a tener que dejar en blanco esos tres campos para cada una de las películas para las que no se conocen sus interpretes. O, por ejemplo, si de una película se conoce más de un interprete se tendrá que optar entre sólo almacenar uno de ellos (con lo cual estaríamos perdiendo información y perder información es algo que, en general, hay que desechar). O bien, repetir en nuevas filas toda la información de las películas para las que se conoce más de un protagonista junto con cada uno de los intérpretes de dicha película. Para entender mejor los problemas expuestos tenemos la figura 4.6 que muestra un posible contenido de la tabla Peliculas que acabamos de modificar.
Con el ejemplo de la figura 4.6 que tan solo contiene diez películas ya podemos ver los problemas a que hacíamos referencia en el párrafo anterior. Así, podemos ver que hemos tenido que repetir información de dos películas (La Comunidad del Anillo y Million Dollar Baby) porque conocíamos dos intérpretes de las mismas y que hay intérpretes (Harrison Ford, Liv Tyler y Javier Bardem) que nos aparecen varias veces por ser protagonistas en varias de nuestras películas.
Los problemas que teníamos al incluir el campo Generos se hacen en este caso más críticos. Si un intérprete decide cambiar de nombre, ya tenemos dos campos a modificar en cada fila de las que aparezca. Pensemos además un supuesto que no nos habíamos planteado con los géneros cinematográficos, como podría ser, si le dejamos alguna película a alguien que no nos la devuelve nunca (un ejemplo bastante real), y, al cabo del tiempo, decidimos borrar esa película de nuestra base de datos nos podemos enfrentar a varios problemas. Uno de ellos es que, si esa era la única película que tenía de un intérprete voy a perder toda la información de ese intérprete (en la figura 4.6 si tuviera que borrar Gladiator perdería la información de Russell Crowe) y el otro problema es que si de esa película tenemos guardados varios de sus protagonistas, tendremos que borrar varias filas de la tabla.
Por tanto, parece más recomendable dejar la tabla Peliculas como estaba al inicio de esta unidad y tener por otro lado la tabla Interpretes (Figuras 4.7 y 4.8) que creamos en la segunda unidad, intentando indicar de alguna manera que van a existir relaciones entre filas de la tabla Peliculas con filas de la tabla Interpretes (Figura 4.9).
Una vez que ya tenemos claro que algunas veces vamos a necesitar indicar que tenemos tablas que están relacionadas vamos en primer lugar, a ver qué tipo de relaciones pueden existir y, segundo, cómo indicar las relaciones en OOo Base cada uno de esos tipos de relaciones.