Recuerda las tablas weather y
cities del Chapter 2. Considera el siguiente problema: quieres
asegurar de que nadie pueda insertar filas en la tabla
weather que no tengan una entrada coincendente
en la tabla cities. Esto se llama
mantener la integridad referencial de
tus datos. En sistemas de bases de datos muy simples esto se
implementaría (si es que se hace) buscando primero en la tabla
cities para verificar si existe un registro coincidente,
y luego insertando o rechazando los nuevos registros de
weather. Este enfoque tiene varios problemas
y es muy incómodo, por lo que PostgreSQL puede hacerlo por ti.
La nueva declaración de las tablas se vería así:
CREATE TABLE cities (
name varchar(80) primary key,
location point
);
CREATE TABLE weather (
city varchar(80) references cities(name),
temp_lo int,
temp_hi int,
prcp real,
date date
);
Ahora intenta insertar un registro no válido:
INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');
ERROR: insert or update on table "weather" violates foreign key constraint "weather_city_fkey" DETAIL: Key (city)=(Berkeley) is not present in table "cities".
El comportamiento de las claves foráneas se puede ajustar con precisión a tu aplicación. No iremos más allá de este simple ejemplo en este tutorial, sino que te remitimos al Chapter 5 para obtener más información. Hacer un uso correcto de las claves foráneas definitivamente mejorará la calidad de tus aplicaciones de bases de datos, por lo que se te anima encarecidamente a aprender sobre ellas.