Unidad 4. Relaciones entre tablas

Este tema está dedicado exclusivamente a definir las relaciones entre tablas y estudiar cómo se establecen en OOo Base.
En el primer apartado se introduce el concepto de relaciones entre tablas.
En el segundo apartado se especifican los posibles tipos de relaciones existentes entre tablas.
Por último, en el tercer apartado se explica cómo indicar relaciones en OOo Base.

1. Relaciones entre tablas
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.

unidad4_html_m40527fe3_1.png

Figura 4.1 Tabla películas con el género de cada película

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).

unidad4_html_m3a8a8424.png

Figura 4.2. Diseño de la tabla Generos

unidad4_html_63db8932.png

Figura 4.3. Posible contenido de la tabla Generos

figura044.jpg

Figura 4.4. Filas relacionadas entre tabla Peliculas y tabla Generos

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.

unidad4_html_m725e6dda_1.png

Figura 4.5. Diseño de la tabla Peliculas junto con información de interpretes

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.

unidad4_html_m3038be6c_1.png Figura 4.6. Tabla Peliculas con posibles datos

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).

unidad4_html_795ecbd1.png

Figura 4.7. Diseño de la tabla Interpretes

unidad4_html_7ce00b30.png

Figura 4.8. Contenido de la tabla Interpretes

figura049.jpg

Figura 4.9 Filas relacionadas entre tabla Peliculas y tabla Interpretes

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.

2. Tipos de relaciones entre tablas
Para ver la forma de establecer la relación es necesario decidir, previamente, qué tipo de relación existe entre las tablas. Existen tres tipos básicos de relaciones entre tablas:

  • Uno a muchos. Este tipo se da cuando una fila de la primera tabla puede estar relacionada con muchas filas de la segunda tabla, pero una fila de la segunda sólo está relacionada con una de la primera. Es decir, si consideramos que una película sólo puede tener un único género, éste sería el tipo de relación que existe entre la tabla Genero y la tabla Peliculas (ver Figura 4.4) ya que, por ejemplo, el género Drama tiene varias películas relacionadas que son de dicho género pero dada una película sólo está relacionada con un género.
  • Muchos a muchos. Esta clase de relación ocurre cuando una fila de la primera tabla puede estar relacionada con muchas filas de la segunda tabla y una fila de la segunda tabla puede estarlo con muchas filas de la primera. Un ejemplo de este tipo lo tenemos en la relación entre la tabla Peliculas y la tabla Interpretes (ver Figura 4.9) porque, dada una película en particular, puede tener muchos intérpretes, y, viceversa, dado un intérprete, este puede haber intervenido en muchas películas.
  • Uno a uno. Este tipo de relación aparece con menos frecuencia y sucede cuando una fila de la primera tabla sólo puede estar relacionada con una fila de la segunda y una fila de la segunda tabla sólo puede estar relacionada con una de la primera. Un ejemplo de este tipo de relaciones podría ser entre una tabla con países y otra con jefes de gobierno, dado que, normalmente, un país sólo tiene un jefe de gobierno y un jefe de gobierno lo es sólo de un país.

Si estamos seguros de cuál es el tipo de relación que existe entre nuestras tablas el siguiente paso es ver cómo podemos indicarlo en OOo Base.

3. Establecer relaciones entre tablas
En función del tipo de relación, los pasos a realizar para indicarlas en OOo Base son distintos. A continuación se explica al detalle las reglas básicas para los tipos uno a muchos y muchos a muchos.
3.1 Establecer relaciones uno a muchos
Para este tipo de relaciones la solución siempre es crear una nueva columna en la tabla del lado del muchos, es decir, debemos crear una nueva columna en la tabla cuyas filas sólo pueden estar relacionadas con una fila de la otra tabla, de manera que el valor de ese campo me indique sin lugar a dudas con qué fila está relacionada de la otra tabla.
En el caso de Generos y Peliculas, esto supone que tenemos que crear en Peliculas un nuevo campo que para cada película mantenga un valor que me indique sin error al género al que pertenece. Por tanto, la columna debe ser del mismo tipo de dato que la columna que sea clave primaria en la otra tabla y los valores que podrá contener será cualquiera de los valores que tome la clave primaria en dicha tabla. Es decir, en la tabla Peliculas tendremos que crear una columna del mismo tipo que Id_genero (Integer), a la que llamaremos Genero (ver Figura 4.10), y los valores que pondremos en esa columna estarán comprendidos entre el 1 y el 9, que son los distintos valores que toma ese valor en la tabla Generos (ver Figura 4.3).

unidad4_html_cd827fc_1.png

Figura 4.10 Tabla Peliculas con nuevo campo Genero

Una pregunta que seguro surge después de leer esto es ¿por qué la nueva columna Genero en Peliculas sólo puede tomar valores entre 1 y 9? La respuesta es muy simple: esta nueva columna la estamos creando para poder referenciar en cada película a la fila en Generos con la que está relacionada; es decir, no tiene sentido que la película Rocky tenga como género el 12 si dicho género no existe en la tabla Generos.

unidad4_html_m93e308e_1.png

4.11. Apertura de ventana Relaciones

Pero con la creación de esta columna no hemos terminado. Falta indicarle a OOo Base explícitamente que las dos tablas están relacionadas y que vamos a utilizar para mantener dicha relación la nueva columna Genero que hemos creado en Peliculas. Para realizar esta operación tenemos que abrir la herramienta Relaciones de OOo Base. Para ello nos situamos en la ventana principal, pinchamos en la pestaña Herramientas y dentro del menú que se despliega seleccionamos Relaciones (ver Figura 4.11).
Lo primero que nos ocurre nada más entrar en la ventana Relaciones es que se despliega una ventana donde debemos seleccionar las tablas sobre las que vamos a establecer la relación (ver Figura 4.12), en nuestro caso, elegimos las tablas Peliculas y Generos y cerramos dicha ventana.

unidad4_html_m48899c3b.png

Figura 4.12. Selección de tablas a relacionar

A continuación ya podemos establecer la relación que queremos indicar. Para ello pinchamos en el icono que aparece a la derecha en la ventana Relaciones (el icono que contiene tres tablas con una estrella encima, ver Figura 4.13).

figura0413.jpg

Figura 4.13. Icono para añadir nueva relación

Entonces, nos debe aparecer una ventana (ver Figura 4.14) donde primero debemos indicar las tablas que queremos relacionar para, a continuación, elegir en función de qué columna vamos a establecer la relación; es decir, en nuestro caso será entre el campo Genero de Peliculas e Id_genero de Generos.
En la parte inferior de esta ventana veremos que OOo Base nos pide que indiquemos dos opciones: la de actualización y la de eliminación; y que nos ofrece cuatro posibilidades para cada una de ellas. Estas opciones sirven para indicar qué hacer si algún valor del campo de clave primaria que está siendo referenciada (en nuestro caso Id_genero) sufre alguna modificación o si esa fila es eliminada. Las posibilidades son:

  • no realizar ninguna acción.
  • actualizar o borrar en cascada: es decir, si cambiamos en Generos de 5 a 17 el valor de Id_genero de Drama, entonces, todas las filas de Peliculas cuyo género sea Drama pasarán a tener el valor 17. O en el caso de borrado, si borramos el género Drama en Generos todas las filas de Peliculas de ese género se borrarán por lo que, esta opción debe elegirse con mucho cuidado.
  • poner a null: es decir, si cambiamos o borramos el género Drama, el campo Genero de esas películas se queda en blanco.
  • predeterminar: es decir, podemos fijar un valor por defecto en el campo Genero de Peliculas si el género al que referencian en la tabla Generos es modificado o borrado.

Para la actualización, lo normal suele ser elegir la posibilidad de actualizar en cascada, y para el borrado no existe una opción preferida sino que dependerá bastante del contexto, en nuestro caso, para esta relación, indicaremos poner a nulos.

unidad4_html_m5eac6b66.png

Figura 4.14. Indicación de relación entre tabla Generos y Peliculas

Una vez hemos terminado de indicar la relación, ésta debe aparecer indicada en la ventana Relaciones tal y como se muestra en la figura 4.15. Así, podemos observar que ahora aparece una línea uniendo ambas tablas y que en el extremo de esa línea en el lado de la tabla Generos aparece el valor 1, y que, en el otro extremo, el de la tabla Peliculas, nos aparece el valor n. Estos valores nos están indicando que el tipo de relación es de uno (1) a muchos (n).

unidad4_html_mee82d71.png

Figura 4.15. Relación uno a muchos entre Generos y Peliculas

3.2 Establecer relaciones muchos a muchos
En este tipo de relaciones no sirve la solución anterior de crear una columna en la tabla del lado del muchos apuntando a la otra tabla porque, como cualquier fila de cada una de las dos tablas puede apuntar a varias filas de la otra tabla, ¿a cuál de las filas de la otra tabla apuntaríamos?.
La solución en este caso es crear una nueva tabla (a la que llamaremos Protagonistas, ver Figura 4.16) con, al menos, dos columnas, cada una de ellas para apuntar a cada una de las claves primarias respectivas de las tablas que queremos relacionar, de manera que cada fila de esta tabla va a representar las relaciones que existen entre las filas de ambas tablas; es decir, cada una de las relaciones que veíamos representadas en la figura 4.9 en forma de flecha van a ser una fila de esta nueva tabla como se puede apreciar en la figura 4.17.

unidad4_html_3579b_1.png

Figura 4.16. Diseño de la tabla Protagonistas

unidad4_html_m335dbcbc.jpg

Figura 4.17. Contenido de la tabla Protagonistas

De la tabla que acabamos de crear falta puntualizar dos cosas. La primera, que es posible añadir nuevas columnas a esta tabla para guardar más información, es decir, no habría ningún problema, por ejemplo, en añadir una nueva columna llamada Papel donde guardáramos el nombre del personaje que el intérprete realiza en dicha película. Lo segundo, que para fijar la clave primaria debemos seleccionar juntas las dos columnas que apuntan a las otras tablas e indicar que ambas juntas son claves primarias. Esto último se puede apreciar también en la figura 4.16 donde se ve que ambas figuran con el símbolo de la llave que significa que son clave primaria.
Una vez que tenemos creada esta tabla nos falta indicar en OOo Base las relaciones existentes, siguiendo la misma mecánica que hemos visto en el anterior apartado.
Así, una vez que nos hemos situado de nuevo en la ventana Relaciones y hemos añadido las tablas que queremos relacionar a dicha ventana, debemos indicar que existe una relación entre la tabla Peliculas y Protagonistas por un lado (Figura 4.18) y la tabla Protagonistas e Interpretes por otro (Figura 4.).

unidad4_html_mbb8e3e.png

Figura 4.18. Relación entre Peliculas y Protagonistas

unidad4_html_78f87d1f.png

Figura 4.19. Relación entre Protagonistas e Interpretes

Como podemos observar en el diagrama resultante (Figura 4.20), al añadir la tabla Protagonistas, la relación muchos a muchos que existía entre Peliculas e Interpretes se ha convertido en una relación uno a muchos de Peliculas a Protagonistas y en otra relación uno a muchos de Interpretes a Protagonistas. Esto es debido a que, dada una fila de Protagonistas, va a estar relacionada con una de Interpretes y una de Peliculas pero, dada una fila de Interpretes y Peliculas, pueden estar relacionadas con muchas de protagonistas. Por ejemplo, la fila de Protagonistas con los valores [5,10] sólo va a estar relacionada con la película La Comunidad del Anillo por un lado y la interprete Liv Tyler por otro, pero, La Comunidad del Anillo está y puede estar relacionada con muchas filas de Protagonistas (tantas como protagonistas guardemos de esa película) y la intérprete Liv Tyler también está y puede estar relacionada con muchas filas de Protagonistas (tantas como en películas haya participado).
Esto ocurre siempre con las relaciones muchos a muchos: primero se crea una tabla intermedia para relacionar ambas tablas y luego la relación que pasan a tener las dos tablas originales con la recién creada es de uno a muchos, respectivamente. Además, en este caso, es recomendable fijar las opciones de actualización y borrado a “en cascada”.

unidad4_html_a7491f2_1.png

Figura 4.20. Diagrama de relaciones final

4. Ejercicios propuestos.
1.Realizar la creación de la tabla Generos con los tipos de columna y las filas que aparecen en las figuras 4.2 y 4.3
2.Realizar la creación de la tabla Protagonistas con los tipos de columna y las filas que aparecen en las figuras 4.16 y 4.17
3.Establecer las relaciones que aparecen en la Figura 4.20.

68 Respuestas a “Unidad 4. Relaciones entre tablas

  1. Cuando intento establecer la relación entre las tablas Protagonistas e interpretes, me sale el siguiente mensaje:

    Colum types do not match in statement [ALTER TABLE»Protagonistas» ADD FOREING KEY «Interprete» («Id_interprete») ON UPDATE CASCADE IN DELETE]

    Las dos últimas palabras (IN DELETE) quedan tapadas por el botón «aceptar», que no funciona y obliga a pinchar en la esquina superior derecha del cuadro para cerrarlo, y no puedo asegurar que sean exactas.

  2. Mea culpa. 😦
    No se la puedo echar ni al ordenador ni, muchísimo menos, al manual que encuentro buenísimo. La culpa es toda mía y se debe a mi torpeza informática.
    Para hilaridad general te explico lo que me ha pasado:
    Creé la tabla «Protagonistas», con sus dos campos, pero ¡Ay! me olvidé de llenarla. No contenía ni un sólo registro.
    Como es natural, la cosa no funcionaba. Corregido el error todo se ha arreglado y ya funciona de maravilla.
    Ahora estoy a vueltas con los formularios. En principio, a primera lectura, el capítulo 7 me parece algo abtruso, pero sé que, al final, pasará como con los demás; con paciencia y un poco de atención se irá aclarando.
    Muchas gracias por el tutorial. Me parece magnífico ¡¡Hasta yo lo entiendo!!
    Un Saludo,
    Jorge.

  3. tengo una tabla1 solo con dos campos uno un numero coorrelativo y el otro la correspondencia de ese numero con un nombre

    en la otra tabla2 tengo otro campo con el numero correlativo, ademas de otros muchos campos que no vienen al caso

    ¿como puedo hacer que aparezca en la tabla 2 (en ved de un numero como me aparece ahora) los nombres que coorresponden a ese numero en la tabla 1?

  4. Tengo el mismo problema que Jorge, cuando intento establecer la relación entre las tablas Protagonistas e interpretes, me sale el siguiente mensaje:
    Colum types do not match in statement [ALTER TABLE”Protagonistas” ADD FOREING KEY “Interprete” (”Id_interprete”) ON UPDATE CASCADE IN DELETE]

    Las dos últimas palabras (IN DELETE) quedan tapadas por el botón “aceptar”, que no funciona y obliga a pinchar en la esquina superior derecha del cuadro para cerrarlo, y no puedo asegurar que sean exactas.

    Me anticipo a contestarte que sí tengo seleccionados el campo Interprete de Protagosnistas e Id_Interpretes de Interpretes y que ambos lo tengo definidos como interger.

  5. ayuda qe es estoooo?????

  6. Alma, que dificiles

  7. Alma, que dificiles jambo

  8. llegamos a la unidad 4…y nos encontramos con la figura 4.16 y no sabemos hacer lo de las 2 claves primarias…nos podrias ayudar??

  9. para poner las 2 llaves en una tabla seleccionar las dos columnas y dar botón derecho y dar llave primaria.

  10. NO ME ENTERO DE NADA ESTO ES UNA MIERDAAAAAAAAAA Y TENGO QYE HACER UN EXAMEN DE ESTO! A VER SI EXPLICAMOS MEJOR LAS COSAS EH!!

  11. Quiero pedirte una pequeña indicación.
    La tabla protagonistas me arroja error al guardarla, supongo que se debe a que no se cumple que en las claves primarias no se repitan entradas, ya que al borrar las entradas repetidas me deja guardar sin problemas.
    Gracias por darme la clave de como se hace.
    Muy buen tutorial. Gracias

  12. Bueno estuve revisando y lo que no me deja hacer es guardar con 2 llaves primarias.

  13. Me pasa lo mismo que a Jorge, repito todos los pasos hasta la ventana 4.19, pero me da el mismo mensaje de error, y yo si tengo creadas todas las tablas. Las he revisado y, que yo sepa, estan todas bien. ¡No sé que mas hacer!
    Consigo todas las relaciones excepto entre ‘protagonistas’ e ‘interpretes’

  14. Para Gompa, a mi al principio tampoco me permitia hacerlo, pero selecciona la celda donde pone ‘película’ y dale a ‘AvPag’ en el teclado.
    Luego con el boton derecho se selecciona (o deselecciona) la opcion de la llave.
    Si lo que haces es quitar las llaves de las dos columnas, vuelve a seleccionas las dos columnas igual que antes y con el boton derecho del raton vuelves a hacer lo mismo y ya veras como te aparecen las dos llaves.
    ¡Ojo!, al menos a mi, para que no me diera error al cerrar tenía que tener la ‘flechita verde’ en la columna de abajo, no sé porqué.

  15. hola tengo un pequeño problema estoy creando un sist. de matricula y necesito relacionar mas de 8 tablas como hago para relacionar todas que cuando deseo relacionar mas de 4 tablas se desconfigura todo..o solo relaciona 4 y las demas las deja que puedo hacer????..gracias

  16. Muy buena Intro de BD.
    Saludos

  17. Como se puede hacer dos relaciones 1:N entre las mismas tablas, ejemplo: entre Profesor y Departamento hay dos relaciones 1:N, una puede ser Adscrito (1 profesor pertenece a un departamento y 1 departamento tiene varios profesores) y la otra FormarParteEquipoDirectivo (1 profesor puede formar parte del equipo directivo de 1 departamento y un departamento tiene un quipo directivo de varios profesores)

    Tendria que relacionar la clave primaria de departamento una vez con la clave ajena en de profesor que exprese Adcrito, y otra vez con la clave ajena en profesor que exprese FormaParteEquipoDirectivo.

    Como se hace??

  18. Gracias por todo, pero ya he descubierto por qué no podia hacerlo. La qüestión era la versión del openoffice. Con la 2.4 si que se puede hacer.

    saludos

  19. Hola compañeros…
    Estoy iniciandome en linux, espero pasarme pronto al 100 x 100.
    Existen los campos autonumericos en base de OO??
    Las relaciones me salen, pero no visualizo el resultado de la relacion como pasa en access.
    Tendré que hacer el formulario basado en una consulta o podria ver los datos de las tablas directamente en un formulario?

  20. hola, tengo un problema, estoy creando la base de datos que explica el curso, asi que tengo creada la tabla protagonistas con sus dos columnas como clave primaria pero cuando me voy a la ventana de relaciones y añado la tabla protagonistas solo me aparece la clave primaria en uno de los campos en lugar de los dos. ¿Qué puedo hacer para solucionarlo? Gracias por el tutorial, esta genial. Además es dificil encontrar en interner manuales sobre openoffice en español.

  21. jorge, las consultas no me aparecen como realizadas en el cuadro principal, pero cuando voy a hacer otra consulta, me indican las anteriores.¿se guardan o no?
    gracs

  22. hola tengo un problema y es que no me deja seleccionar 2 filas, no se como hacerlo, me he tirado mucho tiempo, lo que quiero es definir 2 llaves principales para la tabla protagonistas

  23. a la hora de relacionar las tablas, me salen las flechas, pero no me indica si es una a muchos ni viceversa. ademas, despues le doy a guardar y cierro y cuando vuelvo a abrir las relaciones, no tengo ninguna tabla relacionada.
    He repetido todos los pasos desde el principio y creo que los hago todos bien y siempre acabo igual.

  24. No se si sirva de consuelo para pablo pero me pasa exactamente lo mismo: no me indica si es una a muchos y al cerrarla pierdo las relaciones. Hice una prueba extra que es sin cerrar el cudro de relaciones hacer un click en la línea de unión para editar la relación y al volver a dar aceptar sale el siguente msje. de error: Integrity constraint violation – no parent 733, table: NOMBRE_TABLA in statement [ALTER TABLE «NOMBRE_TABLA» ADD FOREIGN KEY («nombre_campo_de_ID») REFERENCES «NOMBRE_SEGUNDA_TABLA» («nombre_segundo_campo_ID») ON UPDATE CASCADE ON DELETE SET NULL]
    ¿Alguien con alguna idea al respecto???

  25. Claudio, prueba con lo siguiente:
    una vez hayas hechos las relaciones (aunque sea entres las dos primeras tablas), dale a aceptar y luego haz doble click otra vez sobre la linea que relaciona ambas tablas y vuelva a darle a aceptar. A mi así me resultó bien.
    suerte

    • gracias pablo llevaba dos dias con esto. Parece raro que no se explique en el tutorial la manera de guardar.Veo que os pasaba lo mismo, me pregunto si es cosa de estar en linux.
      Gracias pablo y claudio
      Teresa

  26. Cree una tabla para administrar una lista de artículos periodísticos y dentro de ella un campo denominado sección, que está relacionado con otra tabla de secciones y temas. Ahora, es necesario que yo conozca los números de registro de cada sección para cargar datos en la lista de artículos o existe alguna forma de colocar algo así como una lista desplegable en forma automática?

  27. Buenos días:

    He creado dos bases de datos distintas y me gustaria relacionarlas, esto es tengo dos tablas una en una base de datos y otra en otra, con bastantes registros, como puedo pasar ambas tablas a una base de datos conjunta.

    Muchas gracias y felicidades por el tutorial

  28. Gracias a Claudio y a Pablo, especialmente a este último, porque me pasaba exactamente lo mismo a la hora de relacionar las tablas, y haciendo lo que Pablo aconseja en su correo de 17/12/08 he encontrado la solución.

  29. Tengo un problema, porque no se guardan las relaciones?.
    Me explico: No tengo problema a la hora de hacer las relaciones entre las tablas, las guardo, y las cierro. Pero a la hora de revisar las revisiones posteriormente no aparece ni una relación, como si no se hubiesen guardado.
    ¿A que se debe esto?

  30. Hola Álvaro:
    Cuando creas la relación entre las tablas géneros y películas, ahora en la tabla películas, en el campo género, ¿aparece una ventana emergente mostrando el género, o tengo que ir a mirar en la tabla géneros qué género?
    Por otro lado, en Access está la opción de integridad referencial, ¿en Base también?

    Saludos y gracias

  31. Vale que el creador de este tutorial no deba dar explicaciones, como explica en el post 1, pero creo que si hay una duda generalizada con un error que se debe a una mala explicación del tutorial, a mi parecer se debería solucionar.

    Atentamente, un usuario enojado.

  32. Hola Jacobo:
    Creo que te equivocas, y la clave está en cómo te calificas, como usuario. Perdona pero la persona que ha creado este tutorial lo ha hecho con el ánimo de ser útil, pero no tiene ninguna responsablidad, no es una empresa ni presta un servicio cobrando. Así que lo mejor que haces es aportar tú mejoras al tutorial en vez de criticar.

    Saludos y enhorabuena a Álvaro por este tutorial tan bueno.

  33. Tengo el mismo problema que Jorge, cuando intento establecer la relación entre las tablas Protagonistas e interpretes, me sale el siguiente mensaje:
    Colum types do not match in statement [ALTER TABLE”Protagonistas” ADD FOREING KEY “Interprete” (”Id_interprete”) ON UPDATE CASCADE IN DELETE]

    Las dos últimas palabras (IN DELETE) quedan tapadas por el botón “aceptar”, que no funciona y obliga a pinchar en la esquina superior derecha del cuadro para cerrarlo, y no puedo asegurar que sean exactas.

    Tengo seleccionados el campo Interprete de Protagosnistas e Id_Interpretes de Interpretes y ambos los tengo definidos como interger.

    Alguien dijo que este tutorial (por cierto, muy bueno) no sirve para OOo 3.1, si esto es así, ¿cómo resuelvo el temita de relaciones truncadas?

  34. Tenía el mismo problema al relacionar las tablas Interpretes y protagonistas y se me solucionó al cambiar el tipo de campo de Id_Integrer de la tabla Interpretes. Saludos.

  35. Tengo este problema al crear una relación de uno a muchos con múltiples llaves heredadas:

  36. solicito el favor si me pueden enviar o incorporar la tabla para hacer una tarea de base de datos,que debo grabar en un CD,URGENTE.

    GRACIAS

  37. A mi me da el mismo error en las mismas relaciones de Id_interprete y pongo los dos con el mismo valor y me sigue dando el error

  38. Me parece magnificamente detallado.

    Me gustaría saber si hay forma de que, al introducir ya los datos en un campo que depende de otra tabla, aparezca una lista desplegable que muestre los valores que se permiten (como sucede en Access).

    Muchas gracias a todos.

  39. Estoy en el apartado 4.16, sólo me deja poner una llave primaria, no en los dos campos como aparece en la imagen.

    • para seleccionar las dos lineas debes pulsar la tecla de mayuscula y hacer clic en las dos, una ves seleccinadas darle a llave principal.

  40. Estimados, me pasa lo siguiente.
    Tengoo una columna con datos los cuales los traje de un Excel y los quiero seguir trabajando en OO

    los valores en excel me figuraban Asi:
    1.234,57 pero en OO me figuran 1,234.57 lo cual no me sirve por un tema de criterios que se vienen manejando en la empresa. Tambien me paso que algunos valores me los puso como Fecha.

    Podran ayudarme?

    Saludos y gracias

  41. hola soy nuevo en esto de base y queria ver si alguien me podia ayudar, mi problema es el siguiente, estoy haciendo una base de datos con varias tablas y tengo que hacer como 9 relaciones entre las diferentes tablas, y todas necesitan tener la opcion de actualizar en cascada activada , pero cuando guardo y cierro el cuadro de relaciones se borra precisamente la opcion de actualizar en cascada, aunque las relaciones no se me borran como le ocurre a muchos. Alguien tendra idea de a que se debe esto? alguien menciono que con mas de 4 tablas se desconfigura todo

  42. Cual es la diferencia entre un interprete y el protagonista?

    Es muy util este tutorial , muchas gracias por facilitarnos la tarea.

    Saludos

  43. Me refiero como si estuviera en microsoft office que se tiene que referrecial o se debería de referencial, en el openoffice.org no?

  44. q pasada de pagina. gracias por la ayuda!!! me ha servido de mucho

  45. ¿como puedo realizar relaciones 1 a 1?

  46. Buenas tardes amigo, excelente tu explicación en relación a la configuracion de de claves primarias para la relacion mucho a mucho. Fue un poco dificil hacer que aparecieran las dos llaves repeti el procedimiento varias veces hasta que aparecieron. El otro problema para el cual requiero su ayuda es que al crear el formulario para incorporar datos a la base de datos no se como relacionar los campos de manera que la tabla que creamos se cargue automaticamente a medida que incorporamos los datos de forma automatica. Probe colocandole datos manualmente excelente funciona cuando hacemos una consulta pero como hacemos desde un formulario estos datos se carguen automaticamente.

    Saludos

  47. Antonio Bautista

    Me encanta la pagina , saludos desde Caracas

  48. En la parte que aparece la tabla de protagonistas con 2 llaves maestras no se como sacarla

    porfa que alguién me explique porque nada mas me deja seleccionar una o la otra y si la dejo sin llave maestra no me deja ingresarle datos

  49. Hola, cuando trato de hacer una relación entre dos tablas me sale el siguiente mensaje:

    Integrity constraint violation
    No parent 0910qaf015, table IP´s in statement
    [ALERT TABLE «IP´s» ADD FOREIGN KEY («Número de Serie») REFERENCES «Soporte OA» («Número de Serie»)]

  50. Jennifer Lee Alvarado

    Estoy tratando de elaborar una base de datos para llevar el control de las denuncias que recibimos en la institución, para ello en el accese cuando relaciono el campo area de la tabla denuncias con la tabla áreas, esto me permite que al ir ingresando los datos, se habra una flecha y pueda escoger el área pero no he podido lograr con el Open Office que salgan estas flechas, el problema que tengo es que en la institución no todas las máquinas que requierenutilizar esta base de datos tienen licencia para Acceses y por ello requiero usar el Open Office pero este programa es desconocido por la institución. si pudieran ayudarme, le agradecería mucho

  51. Yo también he tenido algunos problemas al establecer relaciones muchos a mucho a través de una tabla intermedia. ¿Cómo lo solucioné? Me aseguré que los tipos de campo que relacionaba en las dos tablas coinciden

  52. puede ayudar xro no encuentro la solucion

  53. He relacionado dos tablas, «tabla-alumno» i «tabla-aula», tal como se explica muy bien en este tutorial. Quiero que cuando tenga un alumno (campo ‘IdAlumno’ de «tabla-alumno») en el campo ‘aula’ (relacionado con el campo ‘IdAula’ de «tabla-aula») me aparezcan las opciones disponibles (és decir la lista de aulas), i no que la tenga que teclear de nuevo (y sólo consigo que el programa me alerte que lo que escribo és admisible o no). Es esto posible? Porque de otro modo esta base de datos no me sirve. Hasta la fecha (llevo años intentando canviar acces por openoffice) no he encontrado ninguna solución en internet ni fuera de internet. Muchas gracias.

  54. Yo también he tenido algunos problemas al establecer relaciones muchos a mucho a través de una tabla intermedia. ¿Cómo lo solucioné? Me aseguré que los tipos de campo que relacionaba en las dos tablas coinciden

  55. Pingback: Tutorial de Base de datos – OpenOffice.org « HiperEidon

  56. creo la relacion entre la columna Id_genero y genero pero nose como establecer por ejemplo que la fila 10, 11 y 12 de la columna «id_genero» corresponde a la fila 7,8,9 de la columna «Genero».
    Soy novato y busco aprender un poco mas acerca de este interesante soft

  57. El manual es fantastico, muy didactico y al grano. El mejor que he visto.

  58. Hola buenas, he hecho todo lo que dice el manual y al final ya lo tengo como te indica con las relaciones definidas y tal, pero tengo una duda: ¿debería salirme ya los valores del genero en la columna del genero en la tabla películas o tengo que introducir manualmente esos valores? de hecho creia que al definir la relacion entre las tablas de Genero y Peliculas se introducirian los numeros del genero en la tabla de peliculas en la columna qie le corresponde, a ver si alguien puede contestarme porfa, salud!

  59. Pero no completa la columna de genero por eso dudo que haya hecho algo mal

  60. Que listas somos! sabemos hacerlo todo super bien! 🙂

  61. hola a todos, necesito ayudaaaa
    estoy haciendo la base de datos que dicta el curso, pero tengo el inconveniente en la parte de hacer relaciones de peliculas a protagonistas y de protagonista a interpretes, no me deja aceptar en ninguna de las opciones.
    gracias, muy bueno el tutorial! (excepto por este problemita)

  62. Sobre el tema relaciones y el resultado final: he estado dando vueltas a la relación Películas y Géneros, ya que no entiendo muy bien por qué tengo que asignar un número a cada género y que el campo Id_nombre sea la clave primaria, ya que en ese caso tengo que asignar primero a cada película el género al que pertenece. Lo que yo he hecho ha sido crear la tabla Géneros con una sola columna y asignarle la clave primaria directamente. He relacionado los campos sin ningún problema y luego he hecho la ConsultaTotal. En el formulario para los Géneros he puesto un menú desplegable y desde allí eliges el género que quieres, guardas el resultado del registro y a correr. Si alguien conoce otro método o qué hacía mal antes que lo comente, por favor. Gracias por el tutorial y las opiniones de todos los usuarios. Seguimos ubunteando!!!

  63. Haber para las personas que hablan sin saber, EL FALLO SE DEBE A QUE: o el formato de lo que van a relacionar no es el mismo o el numero de cosas no es el mismo y esto os ara que os salga el cartelito del error, asi que revisen que esten en el mismo formato y que numero de cosas ¿oki? 😉