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)
-   -   Integridad Referencial (https://www.clubdelphi.com/foros/showthread.php?t=31644)

seara2005 13-05-2006 01:01:17

Integridad Referencial
 
hola a todos,

Necesito que alguien me explique si existe alguna variante de que Interbase me chequee el mantenimiento de la integridad referencial.
Me explico mejor: Tengo creada una Base de datos maestro detalles, la cuestión es que yo tengo que controlar si un usuario va a eliminar o modificar el campo llave del maestro de forma tal que no deje ningún detalle colgado (sin maestro).

¿Es posible que el propio SGBD me controle esto?

Yo estoy utilizando Delphi 7 e Interbase 6.5

Gracias

waltergomez 13-05-2006 02:58:14

Lee sobre la clausula cascade.

Salu2.

seara2005 14-05-2006 17:14:21

Gracias Ya Resolvi Y Me Funciona De Maravilla

seara2005 14-05-2006 18:02:07

Me explico como lo hice para que le pueda servir a otros, porque de eso se tratan los foros:

Bien, yo estoy utilizándo el (IB Expert) un software muy bueno y que tiene una versión libre con pocas limitaciones.

Tengo dos tablas una Maestra y una detalles.

Creo una llave primaria (primary key) en maestra, y voy a la tabla detalles y en las restrinciones creo una llave foránea (foreing key) sobre el campo llave y que hace referencia al campo llave de la tabla maestra, luego aparecen las opciones de como responder ante una modificación o una eliminación del campo llave de la tabla maestra, particularmente yo escogí para modificación (cascade) donde el SGBD me modifica automáticamente el campo llave de la tabla esclava manteniendo la intedridad, y en eliminar escogí (no action) que evita la posibilidad de que el usuario elimine un record de la tabla maestra si tiene dependencias en la tabla esclava.
en IB Expert todo esto es visual y muy fácil y además te va poniendo el código SQL que se va generando.

CODIGO SQL:

Para crear la llave primaria en la tabla maestra:

ALTER TABLE MAESTRA ADD CONSTRAINT PK_MAESTRA PRIMARY KEY (CAMPO LLAVE);


Para crear el índice foráneo en la tabla esclava:

ALTER TABLE ESCLAVA ADD CONSTRAINT FK_ESCLAVA_1 FOREIGN KEY (LLAVE DE ESCLAVA) REFERENCES MAESTRA (LLAVE DE MAESTRA) ON UPDATE CASCADE;


Ya lo he probado y funciona de maravila.

Gracias a todos y a los principiantes como yó les recomiendo que utilicen el IB Expert que nos permite hacerlo todo visualmente e ir aprendiendo SQL.

Lepe 14-05-2006 20:05:15

Deberías añadir ... ON DELETE CASCADE ;)

seara2005 15-05-2006 06:55:01

Lepe, gracias pero si agrego lo que me sugieres me himagino que se eliminarían los records de la tabla esclava si se borra su maestro y no es lo que pretendo, con solo omitir ON DELETE el SGBD para mantener la integridad no permite borrar un maestro que tenga esclavos y es precisamente lo que quiero.

Gracias de todos modos

seara2005 15-05-2006 06:58:29

Si alguien necesita el instalador del IB Expert se lo puedo enviar a su correo, la versión que tengo es libre.


La franja horaria es GMT +2. Ahora son las 18:43:20.

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