Llaves Foráneas
Recuerde las tablas de clima y ciudades de Tutorial: SQL?. Considere el siguiente problema: Usted quiere asegurarse que ninguno inserte filas en la tabla 'clima' que no concuerden con la entrada de la tabla 'ciudades'. Esto es llamado integridad referencial de sus datos. En sistemas simplistas de bases de datos debería ser implementado (si es que se hace) creando en la tabla 'ciudades' un chequeo donde verifique que existe este registro, y luego insertar o prohibir los nuevos registros de 'clima'. Este enfoque tiene una serie de problemas y no es muy conveniente, por eso PostgreSQL puede hacerlo por usted!
La nueva declaración de las tablas quedaría así:
CREATE TABLE ciudades (
ciudad varchar(80) primary key,
ubicacion point
);
CREATE TABLE clima (
ciudad varchar(80) references ciudades(ciudad),
temp_min int,
temp_max int,
prcp real,
fecha date
);
Ahora inserte un registro no válido:
INSERT INTO clima VALUES ('Buenos Aires', 45, 53, 0.0, '1994-11-28');
ERROR: insert or update on table "clima" violates foreign key constraint "clima_ciudad_fkey" DETALLE: Key (ciudad)=(Buenos Aires) is not present in table "ciudades".
Traducido:
ERROR: la inserción o actualización en la tabla "clima" viola la restricción de clave foránea "clima_ciudad_fkey" DETALLE: La clave (ciudad)=(Buenos Aires) no está presente en la tabla "ciudades".
El comportamiento de las llaves foráneas puede ser afinado para su aplicación. No iremos más alla de este simple ejemplo en este tutorial, pero lo referenciaremos a Capítulo 5 para más información. Hacer uso correcto de las llaves foráneas puede mejorar definitivamente la calidad de sus aplicaciones, por lo que le recomendamos fervientemente que aprenda sobre ellas.
