Al terminar, podrás
- Distinguir una clave primaria de una clave foránea.
- Interpretar una relación uno-a-muchos.
- Reconocer un identificador que no tiene fila relacionada.
Recupera lo aprendido: ¿Por qué nombre no siempre basta para identificar una fila de clientes?
La idea clave
Una relación conecta filas de tablas distintas mediante valores compatibles. La clave primaria identifica una fila de forma única; una clave foránea guarda uno o varios valores que deben corresponder a una clave de la tabla relacionada. En los ejemplos iniciales del curso usamos una sola columna que referencia la clave primaria.
Modelo mental: autores.id es el número estable de cada autor. libros.autor_id no contiene el nombre: contiene ese número para señalar a qué autor pertenece el libro.
No confundas “identificar” con “referenciar”: una clave primaria debe identificar una fila de forma única. Una clave foránea, en cambio, puede repetirse: varios libros pueden guardar el mismo autor_id porque todos señalan al mismo autor.
La sintaxis básica
CREATE TABLE autores (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL
);
CREATE TABLE libros (
id INTEGER PRIMARY KEY,
titulo TEXT NOT NULL,
autor_id INTEGER,
FOREIGN KEY (autor_id) REFERENCES autores(id)
);La clave foránea protege una relación de existencia: si se aplica la restricción, un autor_id no nulo debe corresponder a un autores.id existente.
Ejemplo paso a paso
| id | nombre |
|---|---|
| 1 | Isabel Allende |
| 2 | Gabriel García Márquez |
| 3 | Rosa Montero |
| 4 | Julio Cortázar |
| 5 | Ursula K. Le Guin |
| id | titulo | autor_id |
|---|---|---|
| 1 | La casa de los espíritus | 1 |
| 2 | Cien años de soledad | 2 |
| 3 | La ridícula idea de no volver a verte | 3 |
| 4 | Rayuela | 4 |
| 5 | Los desposeídos | 5 |
| 6 | El amor en los tiempos del cólera | 2 |
| 7 | La mano izquierda de la oscuridad | 5 |
Antes de unir las tablas, observa el dato que crea la relación.
SELECT id, titulo, autor_id
FROM libros
ORDER BY id;| id | titulo | autor_id |
|---|---|---|
| 1 | La casa de los espíritus | 1 |
| 2 | Cien años de soledad | 2 |
| 3 | La ridícula idea de no volver a verte | 3 |
| 4 | Rayuela | 4 |
| 5 | Los desposeídos | 5 |
| 6 | El amor en los tiempos del cólera | 2 |
| 7 | La mano izquierda de la oscuridad | 5 |
Cómo funciona
- El libro 2 guarda
autor_id = 2. - Ese valor señala la fila
autores.id = 2, Gabriel García Márquez. - El libro 6 repite el mismo identificador porque pertenece al mismo autor.
- La relación uno-a-muchos permite que un autor aparezca en varios libros sin duplicar su nombre en cada fila.
Un error habitual
Guardar un identificador que no existe
INSERT INTO libros (id, titulo, autor_id)
VALUES (8, 'Libro de prueba', 99);Si la clave foránea está activa, el motor debe rechazar la fila porque no existe autores.id = 99. En SQLite la aplicación debe habilitar la comprobación de claves foráneas para cada conexión y no depender del valor predeterminado.
Practica con datos
Laboratorio SQL
Resuelve la consulta
Escribe una consulta que muestre el título y el autor_id de todos los libros.
Resultado esperado: 7 filas con titulo, autor_id. El orden de las filas no importa.
Ver tablas y datos
Cargando la estructura del ejercicio…
La información está en la tabla libros.
Necesitas las columnas titulo y autor_id.
La estructura es SELECT titulo, autor_id FROM libros;
Solución
SELECT titulo, autor_id FROM libros;autor_id guarda el valor que referencia autores.id. La consulta permite ver el dato de relación sin necesitar todavía un JOIN.
Puedes consultar la solución y volver a intentarlo. La práctica se completa cuando tu consulta funciona.
La consulta usa datos ficticios y se ejecuta solo en este navegador.
Fuentes técnicas consultadas
Las fuentes definen las claves foráneas como restricciones de relación entre tablas y documentan la activación específica necesaria en SQLite.
- PostgreSQL: claves primarias y foráneas
- SQLite: soporte y activación de claves foráneas
- SQLite: CREATE TABLE y restricciones
Comprueba si puedes explicarlo
Dos pedidos tienen cliente_id = 1. ¿Violan por ello una clave foránea?
Ver respuesta razonada
No. Varios pedidos pueden referirse al mismo cliente. La clave foránea exige que exista el cliente 1; una restricción UNIQUE adicional impediría repetir esa referencia.
Responde antes de abrir la explicación. Si necesitaste ayuda, cierra la respuesta y vuelve a explicarlo con tus palabras antes de dar la lección por aprendida.
Qué debes recordar
- La clave primaria identifica una fila de la tabla referenciada.
- La clave foránea guarda el valor —o los valores— que referencian la clave de una fila relacionada.
- Una relación uno-a-muchos evita repetir los datos descriptivos de la entidad principal.
A continuación: Continúa con Une coincidencias con INNER JOIN.
Conceptos relacionados
Para decidir qué datos pertenecen a cada tabla, continúa con la normalización de bases de datos: 1FN, 2FN y 3FN. El ejemplo conserva precios históricos y reconstruye pedidos con JOIN.