# Claves primarias y foráneas

> La clave primaria identifica cada fila; la foránea apunta a una fila de otra tabla.

- Nivel: Intermedio
- Temas: Datos
- URL: https://tidbit.legios.com.ar/es/primary-and-foreign-keys/
- En inglés: [Primary and foreign keys](https://tidbit.legios.com.ar/primary-and-foreign-keys/)

En una base de datos relacional, la **clave primaria** (primary key) es la columna, o el conjunto de columnas, que identifica cada fila de forma única. En una tabla `customers` suele ser un `id`: el cliente 42 es siempre ese cliente y ningún otro, aunque haya dos personas con el mismo nombre. La base rechaza una segunda fila con la misma clave primaria y no deja que quede vacía.

Una **clave foránea** (foreign key) es una columna de una tabla que guarda la clave primaria de una fila de otra tabla. La tabla `orders` tiene una columna `customer_id`, y cada valor apunta a una fila de `customers`. Así una base conecta datos sin copiarlos: el pedido no repite el nombre y la dirección del cliente, solo dice "cliente 42", y un `JOIN` de SQL junta las dos cosas cuando las necesitás.

Las claves foráneas además protegen la coherencia. Si están declaradas en el esquema de base de datos, la base no acepta un pedido del cliente 999 cuando no existe ningún cliente 999, y puede impedir que borres un cliente que todavía tiene pedidos. Muchos sistemas de análisis se saltean estos controles para ir más rápido, y por eso la limpieza de datos encuentra tan seguido filas huérfanas.

## Una analogía

El número de DNI es una clave primaria: uno por persona, nunca repetido. Cuando la historia clínica de un hospital anota tu DNI en vez de copiar toda tu vida, ese número es una clave foránea que apunta a vos.

## Para quedarse

- Clave primaria: única y nunca vacía, una por fila.
- Clave foránea: una columna que hace referencia a la clave primaria de otra tabla.
- Conecta tablas sin duplicar datos; los joins siguen esas referencias.
- Declaradas, evitan registros huérfanos, como un pedido de un cliente que no existe.

## Para seguir leyendo

- [Clave primaria en Wikipedia](https://es.wikipedia.org/wiki/Clave_primaria)
- [Clave foránea en Wikipedia](https://es.wikipedia.org/wiki/Clave_for%C3%A1nea)
- [Restricciones y claves en PostgreSQL (en inglés)](https://www.postgresql.org/docs/current/ddl-constraints.html)

## Términos relacionados

- [Base de datos](https://tidbit.legios.com.ar/es/database/): Un depósito ordenado de datos que los programas consultan y actualizan sin riesgo.
- [SQL](https://tidbit.legios.com.ar/es/sql/): El lenguaje para hacerle preguntas a una base de datos.
- [Esquema de base de datos](https://tidbit.legios.com.ar/es/database-schema/): El plano de una base de datos: qué tablas hay, sus columnas y cómo se conectan.
- [Limpieza de datos](https://tidbit.legios.com.ar/es/data-cleaning/): Corregir errores, huecos y duplicados en los datos antes de confiar en ellos.
