INTEGRIDAD REFERENCIAL PROGRAMADA
Publicado por Santiago (42 intervenciones) el 28/11/2014 01:55:03
Hola a todos...
Ante todo, muchas por leer todo lo que se viene. Primero explico qué sucede y después hago la pregunta...
El generador de IR se accede en fase de diseño por medio de la opción "Modificar integridad referencial", del menú Base de datos. Para cada relación entre dos tablas, el generador muestra las reglas posibles que rigen sobre las acciones ACTUALIZAR, ELIMINAR e INSERTAR. Para actualizar, por ejemplo, hay tres reglas posibles: RESTRINGIR, CASCADA o IGNORAR. Si uno quiere ser estricto, lo mejor es RESTRINGIR. Sin embargo, cuando uno crea la relación por medio del programa, VFP siempre asigna, por defecto, la regla IGNORAR. Explico con un ejemplo:
ALTER TABLE tpag ADD FOREIGN KEY codentpag TAG codentpag REFERENCES codent TAG codent
crea una relación entre las tablas tpag y tent, que consiste en que cualquier valor que se inserte en el campo codentpag (de tpag) está relacionado con un valor en el campo codent (de tent). En otras palabras, es una relación "uno a varios" entre tent (maestro) y tpag (detalle). El problema es que, al crear las reglas de esta relación (en la IR), VFP automáticamente asigna IGNORAR como regla para las tres acciones ACTUALIZAR, ELIMINAR e INSERTAR registros en la tabla detalle ( tpag). Entonces, por ejemplo, si al INSERTAR un registro en el detalle (tpag) se asigna un valor al campo codentpag y ese valor no existe en el campo codent de la tabla maestra (tent), la regla IGNORAR hace que no se genere error. Pero si la regla para INSERTAR fuera RESTRINGIR, la ausencia del valor en la tabla maestra (tent) ocasionaría un error (Trigger failed o error de desencadenante). Es preferible ser estricto y que se genere un error a permitir que se incluya basura en la tabla.
Ahora sí la pregunta: ¿Hay algún comando de VFP que, dentro del programa, permita modificar las reglas de IR para ACTUALIZAR, ELIMINAR e INSERTAR? Es decir, que permita modificar las reglas, cambiando IGNORAR por RESTRINGIR. Sería una instrucción que se colocaría inmediatamente después de ALTER TABLE. Hasta ahora, el cambio de las reglas lo he realizado en forma manual por medio del generador de IR, accediendo a la base de datos de cada cliente, cuando lo lógico es que, al instalar una nueva versión del programa por medio de la cual se crea la nueva relación (ALTER TABLE...), se modifiquen de una vez las reglas de IR...
Espero haberme hecho entender. Muchas gracias por su paciencia... y por la ayuda que espero que llegue...
Ante todo, muchas por leer todo lo que se viene. Primero explico qué sucede y después hago la pregunta...
El generador de IR se accede en fase de diseño por medio de la opción "Modificar integridad referencial", del menú Base de datos. Para cada relación entre dos tablas, el generador muestra las reglas posibles que rigen sobre las acciones ACTUALIZAR, ELIMINAR e INSERTAR. Para actualizar, por ejemplo, hay tres reglas posibles: RESTRINGIR, CASCADA o IGNORAR. Si uno quiere ser estricto, lo mejor es RESTRINGIR. Sin embargo, cuando uno crea la relación por medio del programa, VFP siempre asigna, por defecto, la regla IGNORAR. Explico con un ejemplo:
ALTER TABLE tpag ADD FOREIGN KEY codentpag TAG codentpag REFERENCES codent TAG codent
crea una relación entre las tablas tpag y tent, que consiste en que cualquier valor que se inserte en el campo codentpag (de tpag) está relacionado con un valor en el campo codent (de tent). En otras palabras, es una relación "uno a varios" entre tent (maestro) y tpag (detalle). El problema es que, al crear las reglas de esta relación (en la IR), VFP automáticamente asigna IGNORAR como regla para las tres acciones ACTUALIZAR, ELIMINAR e INSERTAR registros en la tabla detalle ( tpag). Entonces, por ejemplo, si al INSERTAR un registro en el detalle (tpag) se asigna un valor al campo codentpag y ese valor no existe en el campo codent de la tabla maestra (tent), la regla IGNORAR hace que no se genere error. Pero si la regla para INSERTAR fuera RESTRINGIR, la ausencia del valor en la tabla maestra (tent) ocasionaría un error (Trigger failed o error de desencadenante). Es preferible ser estricto y que se genere un error a permitir que se incluya basura en la tabla.
Ahora sí la pregunta: ¿Hay algún comando de VFP que, dentro del programa, permita modificar las reglas de IR para ACTUALIZAR, ELIMINAR e INSERTAR? Es decir, que permita modificar las reglas, cambiando IGNORAR por RESTRINGIR. Sería una instrucción que se colocaría inmediatamente después de ALTER TABLE. Hasta ahora, el cambio de las reglas lo he realizado en forma manual por medio del generador de IR, accediendo a la base de datos de cada cliente, cuando lo lógico es que, al instalar una nueva versión del programa por medio de la cual se crea la nueva relación (ALTER TABLE...), se modifiquen de una vez las reglas de IR...
Espero haberme hecho entender. Muchas gracias por su paciencia... y por la ayuda que espero que llegue...
Valora esta pregunta


0