03.-Claves foráneas
Recordemos el weather
y cities
cuadros del capítulo 2. Considere el siguiente problema: Usted desea asegurarse de que nadie puede insertar filas en el weather
mesa que no tiene una entrada a juego en el cities
mesa. 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 cities
tabla para comprobar si existe un registro de coincidencia, y luego insertar o rechazar el nuevo weather
Registros. 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.