Se puede tener una relación permanente entre dos tablas. Como ejemplo, tomaremos una tabla de clientes, y una tabla de facturas.
La tabla cliente tiene los siguientes campos:
La tabla facturas tiene los siguientes campos:
En la tabla cliente, se tiene que definir el campo "cliente" (suponiendo que éste contiene un número secuencial, "auto-incrementado") como clave primaria. Se hace ésto a través un índices.
En la tabla factura, se define un índice sobre el campo "cliente". Este índice será de tipo "regular" (se supone que pueden haber varias facturas para un solo cliente, por lo tanto no tiene sentido exigir que el cliente sea único).
En el diseñador de base de datos, usando el mouse, se arrastra el índice cliente de la tabla cliente, al índice cliente de la tabla factura.
A continuación, si se quiere que Visual FoxPro automáticamente controle la integridad referencial (explicada más abajo), se tiene que dar la orden de menú "Database | Edit Referential Integrity". Por default, Visual FoxPro no controla nada: en cada relación dice "Ignore | Ignore | Ignore". Para que Visual FoxPro controle la integridad referencial, se tiene que cambiar esto por "Restrict | Restrict | Restrict".
En el ejemplo de la relación entre cliente y factura, la primera columna (el primer "Restrict") hará que no se permita cambiar el código del cliente si hay facturas para ese cliente (de todos modos, normalmente no se cambia el código "interno"). Si, a pesar de mis sugerencias por lo contrario, insiste en usar, por ejemplo, la cédula de identidad del cliente como clave primaria, puede cambiar esto por "Cascade": un cambio en la cédula de identidad del cliente se propagará a todas las facturas. Insisto que esto no es recomendable; es mucho mejor que la clave primaria sea un código "interno", que el usuario final nunca ve, y que nunca se necesita cambiar.
El segundo "Restrict" significa que no se puede borrar un cliente mientras hayan facturas para ese cliente. En algunos casos, se puede cambiar esto por "Cascade". ¡No queremos que al borrar un cliente se borren todas sus facturas, así que ese ejemplo mejor lo dejamos como "Restrict"! Sin embargo, en una relación entre la tabla principal de facturas y la tabla de renglones de detalle de factura, sí puede tener sentido borrar una factura (con todos sus detalles) con una sola orden.
El tercer "Restrict" significa que al agregar una factura sin un cliente válido. Si no queremos exigir esto (es decir, si el campo "cliente" es considerado optativo), podemos dejarlo en su valor inicial, "Ignore".
Volver a: Visual FoxPro | Página Principal de Hilmar Zonneveld