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)
-   -   Principiante integridad referencial (https://www.clubdelphi.com/foros/showthread.php?t=47296)

Gaim2205 23-08-2007 20:35:57

Principiante integridad referencial
 
Asigné integridad referencial entre 2 tablas que son exactamente iguales...

Tabla Profesor y Tabla Nothabil, tienen la siguiente estructura:
Matricula (primaria) : integer;
Nombre : Char;
etc...
etc...

el caso es que son identicas, ambas con la misma llave primaria. Se asigna la integridad entre los 2 campos "matricula".

Pero al momento de agregar un registro mediante mi aplicacion (Delphi 7, componentes MDO) me pone el siguiente error:
'violation of foreign key constraint FK_PROFESOR1" on table "PROFESOR"
foreign key reference does not exist'

alguien puede orientarme... no se puede hacer i.r con 2 llaves primarias?? soy principiante en firebird... Gracias por su ayuda de antemano.

rastafarey 23-08-2007 20:49:19

Resp
 
El problema que tienes es que se esta vilando la integridad referencial.

Ejemplo tienes tabla1 T1 y tabla2 T2

T2 tienen una integridad refenecial hacia T1 Si tratas de insertar un registro en T2 el campo de T2 por el cual se hace referencia a T1 No se Encuantra en registro relacionado no se va a poder insertar.

Te explico con datos

T1(C1:Entero, C2:cadena)

Regsitros de T1

C1 | C2
-------------
1 | Primero
-------------
2 | Segundo
-------------

T2(CT1, C1, C2) Donde CT1 es el campo d erefencia hacia la tabla T2 por el campo C1
Si hacemos esto
Código SQL [-]
Insert into T2 values(3, 1, 'Primero'); //Error no existe un registro relacionadodo en T1
Insert into T2 values(1, 1, 'Primero'); //Bien el registro relecionado en T1 existe
Insert into T2 values(2, 1, 'Primero'); //Bien el registro relecionado en T1 existe
Insert into T2 values(8, 1, 'Primero'); //Error no existe un registro relacionadodo en T1

egostar 23-08-2007 20:58:21

Me parece curioso que quieras tener una integridad referencial en dos tablas identicas, lo que yo tengo entendido las referencias se usan principalmente para tablas maestro-detalle.

Si nos explicas mejor que intentas hacer con las dos tablas te podrían dar una mejor respuesta a tu problemática.

Bienvenido al Club y te invito a que leas nuestra guía de estilo.

Salud OS.

Gaim2205 23-08-2007 21:48:04

entonces.. como lo soluciono?? disculpa la ineptitud pero como dije soy muy principiante jeje

egostar 23-08-2007 21:49:56

Cita:

Empezado por Gaim2205 (Mensaje 225639)
entonces.. como lo soluciono?? disculpa la ineptitud pero como dije soy muy principiante jeje

Si nos dices que pretendes hacer con las tablas, seguro podemos ayudarte o darte algunos consejos.

Salud OS

Gaim2205 23-08-2007 21:56:52

razon
 
egostar, gracias por la bienvenida. La razon es, que en un modulo de la aplicacion se capturan o modifican los datos del registro y se dan de alta en ambas tablas.

Y en otro modulo, se pueden modificar o borrar datos, pero solo en una de las 2 tablas. mientras que la otra se queda intacta.

se que se puede hacer facilmente mediante codigo si (y ya lo hice)... pero queria hacer pruebas con lo de integridad referencial.

danke

Paoti 23-08-2007 22:34:23

Cita:

Empezado por Gaim2205 (Mensaje 225645)
Y en otro modulo, se pueden modificar o borrar datos, pero solo en una de las 2 tablas. mientras que la otra se queda intacta.

Especifica que es borrar datos, eliminar el registro? si es así, y no es la tabla padre se peude hacer, pero si quieres borrar asumiendo que es el registro de la tabla padre y la otra tabla tiene registro pues no se podra eliminar


creo que lo que estas haciendo es insertar datos en la tabla hija y no existe el correspondiente registro padre en la tabla principal

Gaim2205 23-08-2007 23:20:12

Creo que confundi a todos, y la verdad es mucho mas facil hacerlo desde codigo, para la integridad referencial hare lo que postearon antes y solo hacerlo con tablas maestro-detalle...

Como dije soy principiante en bases de datos (empecé ayer) y mi error era no saber que no se pueden insertar datos a una tabla sin que existiera ya un registro en la tabla padre. Pense que se podian insertar en la tabla padre e hija al mismo tiempo.

gracias de todos modos, seguramente tendre dudas menos tontas la proxima vez :P

rastafarey 24-08-2007 19:13:53

Resp
 
Lo que quieres es tener algo como un historico.
Simplemente usas los disparadores de uan tabala para insertar en la otra ya que la integridad referencial no te va ahacer estas cosas.


La franja horaria es GMT +2. Ahora son las 14:42:44.

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