Claves primarias y foráneas

Siguiendo con las tablas weather y cities de la Parte II: El lenguaje SQL, considere el siguiente problema: suponga que quiere asegurarse de que nadie pueda insertar filas en la tabla weather si estas filas no tienen una ciudad que ya esté en la tabla cities. A esto se le conoce como mantener la integridad referencial de los datos. PostgreSQL le da las herramientas para hacer esto por usted.

Cree una base de datos nueva llamada clima:

$ createdb clima

Ahora acceda a la base de datos con psql y cree las tablas weather y cities, pero esta vez especificando las claves primarias y foráneas para mantener la integridad referencial de los datos:

clima=# CREATE TABLE cities (city varchar(80) primary key, location point);
clima=# CREATE TABLE weather (city varchar(80) references cities(city), temp_lo int, temp_hi int, prcp real, date date);

En la tabla cities, se especificó la columna city como clave primaria (primary key) y en la tabla weather la columna city como clave foránea (foreign key). Este es el cambio que permitirá resolver el problema descrito arriba.

Pueble ahora la tabla cities con las ciudades que quiera. Por ejemplo:

clima=# INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');

Pueble también la tabla weather con registros referentes a cualquiera de las ciudades que agregó en la tabla cities. Por ejemplo:

clima=# INSERT INTO weather (city, temp_lo, temp_hi, prcp, date) VALUES ('San Francisco', 43, 57, 0.0, '1994-11-29');

Ahora intente agregar un registro incorrecto en la tabla weather (usando una ciudad que no está registrada en la tabla cities):

clima=# INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');

Debería ver un error como este:

ERROR: inserción o actualización en la tabla «weather» viola la llave foránea «weather_city_fkey»
DETALLE: La llave (city)=(Berkeley) no está presente en la tabla «cities».

El comportamiento de las claves foráneas puede ajustarse específicamente para las necesidades de cada aplicación. Aquí no se va a tratar nada más allá de este ejemplo sencillo, pero puede leer el capítulo 5 del manual de PostgreSQL para obtener más información. El uso correcto de las claves foráneas mejora la calidad de las aplicaciones de bases de datos, así que preocúpese por aprender lo necesario sobre el tema.

Tema anterior

Vistas

Próximo tema

Transacciones

Esta página