03.-Claves foráneas

Recordemos el weathery citiescuadros del capítulo 2. Considere el siguiente problema: Usted desea asegurarse de que nadie puede insertar filas en el weathermesa que no tiene una entrada a juego en el citiesmesa. Esto se llama mantener la integridad referencial de sus datos. En los sistemas de bases de datos simplistás esto se implementaría (si no lo hace) examinando primero la citiestabla para comprobar si existe un registro de coincidencia, y luego insertar o rechazar el nuevo weatherRegistros. Este enfoque tiene una serie de problemas y es muy inconveniente, por lo que PostgreSQL puede hacer esto por usted.

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 invá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 teclas extranjeras puede estar finamente sintonizado con su aplicación. No iremos más allá de este simple ejemplo en este tutorial, sino que nos referimos al para más información. Hacer un uso correcto de las claves extranjeras definitivamente mejorará la calidad de sus aplicaciones de base de datos, por lo que se le anima encarecidamente a aprender sobre ellas.