3.3. Claves foráneas #

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.