Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problemas con Relaciones de tablas en Interbase. (https://www.clubdelphi.com/foros/showthread.php?t=56959)

NPIdea 02-06-2008 11:18:21

Problemas con Relaciones de tablas en Interbase.
 
Hola a todos.

He adquirido recientemente Interbase 2007 server y estoy empezando a diseñar una base de datos y sobre todo a ponerme al día.

Estoy intentando hacer una relación con dos tablas mediante IBExpert Personal y me da error todo el rato.

Tengo:

Tabla1 con una clave primaria ID (valores unicos)
Tabla2 con ID (permite duplicados para relacionar con Tabla1, no tengo clave principal en esta tabla)

Entonces en Foreign key de Tabla1 hago nueva Foreing Key asociando el PK_Tabla1 del campo ID a la Tabla2 (CF) campo ID y poniendo las opciones de modificación y borrado en CASCADE.

Pues no hay forma, me está dando todo el rato error y ya no sé que hacer.

Los dos campos los he asignado a un mismo dominio para que no me diesen problemas y no hay forma.

¿Alguna pista al respecto?

Gracias

Código:

alter table INSTALACIONES
add constraint FK_INSTALACIONES_1
foreign key (IDI)
references ELEMENTOS(IDI)
on delete CASCADE
on update CASCADE

can't format message 13:393 -- message file c:\Program Files\Borland\InterBase/interbase.msg not found.
unsuccessful metadata update.
could not find UNIQUE INDEX with specified columns.

duilioisola 02-06-2008 13:08:07

Para empezar, la FK debe ser de Tabla2 a Tabla1...
Código SQL [-]
ALTER TABLE TABLA2 
ADD CONTRAINT FK_ID FOIREIGN KEY (ID) 
REFERENCES TABLA1 (ID)
ON DELETE CASCADE
ON UPDATE CASCADE

El error te está diciendo que no puede encontrar una PK (o índice unívoco) para el/los campos que quieres relacionar en la tabla contra la que haces la referencia.
Dinos si INSTALACIONES tiene muchos ELEMENTOS o si ELEMENTOS tiene muchas INSTALACIONES...
En el código que pones, parece ser que INSTALACIONES tiene muchos ELEMENTOS. Por lo tanto ELEMENTOS debería tener una PK del campo IDI.

NPIdea 02-06-2008 13:39:54

Gracias por tu pronta respuesta
 
Pues Instalaciones tiene registros unicos, osea va a tener por ejemplo unas 1000 instalaciones y la tabla de elementos va a tener varios elementos por cada instalación.


Osea hay una instalación número 1 pero tiene 5 registros en elementos con IDI=1. Lo que quiero es que si borro la instalacion, me borre los elementos asociados.

Soy novato con esto y se nota, jeje.

Repito, muchas gracais

duilioisola 02-06-2008 13:44:04

Cita:

hay una instalación número 1 pero tiene 5 registros en elementos con IDI=1
Entonces:
1- Debes crear una PK sobre INSTALACIONES del campo IDI.
2- Debes crear una FK sobre ELEMENTOS que relaciones el campo IDI con el campo IDI de INSTALACIONES. (Justo lo contrario de lo que estás haciendo)

Código SQL [-]
/* Paso 1 */
alter table INSTALACIONES add constraint PK_INSTALACIONES primary key (IDI);

Código SQL [-]
/* Paso 2 */
alter table ELEMENTOS
add constraint FK_INSTALACIONES_1
foreign key (IDI)
references INSTALACIONES (IDI)
on delete CASCADE
on update CASCADE

NPIdea 02-06-2008 13:58:12

Muchas gracias por darme solución.

Un saludo


La franja horaria es GMT +2. Ahora son las 07:06:51.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi