certmundo.
es‑mx

6 min de lectura

¿Cómo se relacionan las tablas entre sí?

Las tablas se relacionan entre sí mediante llaves: una llave primaria identifica cada fila de forma única, y una llave foránea conecta esa fila con datos de otra tabla.

El problema que nadie anticipa

Carolina trabaja en el área de sistemas de Liverpool, en su oficina de Insurgentes, un martes por la tarde. Recibe una base de datos enorme con dos tablas: una de clientes y otra de pedidos. Necesita saber qué clientes compraron más de $5,000 en el último mes. El problema: las dos tablas no tienen nada en común... o eso parece.

Ella mira los datos durante diez minutos. Luego nota algo: ambas tablas tienen una columna llamada id_cliente. Ese número pequeño, casi invisible, es la clave de todo.

Ahí está el secreto que transforma una base de datos caótica en un sistema inteligente: la relación entre tablas no depende de magia, sino de un número compartido.

Por qué los datos se dividen en tablas separadas

Imagina que Bimbo guarda información de sus repartidores y sus rutas. Podría poner todo en una sola tabla gigante: nombre del repartidor, teléfono, dirección, ruta, kilómetros, zona. Pero si un repartidor cubre tres rutas, su nombre y teléfono se repiten tres veces.

Eso se llama redundancia, y es un problema serio. Si el repartidor cambia de teléfono, alguien tiene que actualizar tres filas en lugar de una. Si olvida una, los datos quedan inconsistentes.

La solución es dividir la información en tablas especializadas. Una tabla para repartidores, otra para rutas. Cada tabla hace una sola cosa bien. Según estudios de diseño de bases de datos, normalizar así los datos puede reducir hasta un 40% el espacio de almacenamiento en sistemas medianos.

Pero dividir crea un nuevo reto: ¿cómo sabe la base de datos qué repartidor corresponde a qué ruta? Aquí entran las llaves.

La llave primaria: el número que hace único a cada registro

Una llave primaria (PRIMARY KEY) es una columna cuyo valor nunca se repite en toda la tabla. Identifica cada fila de forma única, como el CURP identifica a cada ciudadano mexicano.

Mira esta tabla de clientes de una tienda en línea:

Tabla: clientes

id_cliente | nombre          | correo
-----------|-----------------|-------------------------
1          | Ana Guerrero    | ana@correo.com
2          | Roberto Salinas | roberto@correo.com
3          | Pilar Moreno    | pilar@correo.com

El campo id_cliente es la llave primaria. No hay dos clientes con el mismo id_cliente. La base de datos garantiza esto automáticamente: si intentas insertar un cliente con id_cliente = 1 cuando ya existe uno, el sistema lo rechaza.

Las llaves primarias casi siempre son números enteros que se generan solos (AUTO_INCREMENT en MySQL). Tú no los escribes a mano; la base de datos los asigna al crear cada fila.

La llave foránea: el puente entre dos tablas

Una llave foránea (FOREIGN KEY) es una columna en una tabla que contiene el valor de la llave primaria de otra tabla. Es el puente que conecta los datos.

Mira ahora la tabla de pedidos de esa misma tienda:

Tabla: pedidos

id_pedido | id_cliente | producto         | total
----------|------------|------------------|--------
101       | 2          | Laptop HP        | 18500
102       | 1          | Audífonos Sony   | 2300
103       | 2          | Mouse inalámbrico| 450
104       | 3          | Teclado mecánico | 1200

El campo id_cliente en la tabla pedidos es una llave foránea. Apunta a la llave primaria de la tabla clientes. Gracias a ese número, sabemos que el pedido 101 pertenece a Roberto Salinas (id 2) y el pedido 102 pertenece a Ana Guerrero (id 1).

Nota algo importante: Roberto tiene dos pedidos (101 y 103). Su nombre y correo no se repiten en la tabla; solo aparece su id_cliente. Eso es exactamente lo que queríamos evitar.

Cómo leer las relaciones: el JOIN en acción

Ahora que tienes dos tablas conectadas, necesitas una manera de leerlas juntas. En SQL, eso se hace con la instrucción JOIN. Piensa en ella como una cremallera que une dos columnas coincidentes.

Volvamos con Carolina en Liverpool. Ella quiere ver el nombre del cliente junto con cada pedido. Escribe esto:

SELECT clientes.nombre, pedidos.id_pedido, pedidos.total
FROM clientes
JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente;

El resultado sería:

nombre           | id_pedido | total
-----------------|-----------|-------
Roberto Salinas  | 101       | $18,500
Ana Guerrero     | 102       | $2,300
Roberto Salinas  | 103       | $450
Pilar Moreno     | 104       | $1,200

La cláusula ON clientes.id_cliente = pedidos.id_cliente le dice a la base de datos: "une estas dos tablas donde los valores de esa columna coincidan". Es la instrucción más poderosa del SQL relacional.

Puedes añadir un WHERE para filtrar, igual que aprendiste en la lección anterior:

SELECT clientes.nombre, pedidos.total
FROM clientes
JOIN pedidos ON clientes.id_cliente = pedidos.id_cliente
WHERE pedidos.total > 5000;

Eso devuelve solo los pedidos mayores a $5,000, exactamente lo que Carolina necesitaba.

Un ejemplo con FEMSA

Imagina que FEMSA tiene una base de datos interna para gestionar sus tiendas OXXO. Hay una tabla tiendas con cada sucursal y su ciudad, y una tabla inventario con los productos que tiene cada tienda.

Tabla: tiendas

id_tienda | ciudad          | estado
----------|-----------------|--------
1         | Monterrey       | NL
2         | Guadalajara     | JAL
3         | CDMX            | CDMX

Tabla: inventario

id_producto | id_tienda | producto     | cantidad
------------|-----------|--------------|----------
501         | 1         | Coca-Cola 600ml | 240
502         | 3         | Sabritas      | 180
503         | 1         | Agua Ciel     | 300
504         | 2         | Gatorade      | 95

La columna id_tienda en inventario es la llave foránea que apunta a tiendas. Con un JOIN puedes ver qué productos tiene cada ciudad sin repetir el nombre de la ciudad en cada fila de inventario.

En una cadena real como OXXO, con más de 20,000 tiendas y miles de productos por tienda, este diseño ahorra millones de registros duplicados.

Errores comunes al trabajar con relaciones

El error más frecuente es confundir qué tabla tiene la llave primaria y cuál tiene la foránea. La regla es simple: la tabla "padre" tiene la llave primaria, y la tabla "hijo" tiene la llave foránea.

Otro error es escribir mal el nombre de la columna en la condición ON. Si escribes ON clientes.id = pedidos.id_cliente cuando la columna se llama id_cliente en ambas tablas, la base de datos devolverá un error o resultados vacíos. Verifica siempre los nombres exactos de las columnas.

Finalmente, algunos principiantes olvidan que la llave foránea debe existir en la tabla padre. Si intentas agregar un pedido con id_cliente = 99 y no hay ningún cliente con ese id, la base de datos rechaza el registro. Eso se llama integridad referencial, y es una protección, no un obstáculo.

El regreso de Carolina

Carolina ejecuta su consulta con JOIN y WHERE. En menos de dos segundos, la base de datos le devuelve una lista limpia: ocho clientes que compraron más de $5,000 ese mes. El reporte que antes le tomaba horas armando a mano, ahora tarda segundos.

Lo que hizo posible ese resultado no fue una fórmula compleja. Fue un número compartido entre dos tablas: el id_cliente. Ese pequeño puente numérico es la base de todo sistema relacional moderno.

Cuando diseñes o consultes una base de datos, busca siempre esa columna que conecta las tablas. Cuando la encuentres, ya sabrás exactamente cómo unirlas.

Puntos clave

  • La llave primaria (PRIMARY KEY) identifica cada fila de forma única dentro de una tabla; nunca se repite y la base de datos la protege automáticamente.
  • La llave foránea (FOREIGN KEY) es una columna en una tabla que contiene el valor de la llave primaria de otra tabla, creando así la relación entre ambas.
  • Dividir los datos en tablas separadas evita la redundancia: si un dato cambia, solo necesitas actualizarlo en un lugar.
  • El JOIN conecta dos tablas usando la cláusula ON para indicar qué columnas deben coincidir; puedes combinarlo con WHERE para filtrar resultados.
  • La integridad referencial garantiza que una llave foránea siempre apunte a un registro real en la tabla padre; si no existe, la base de datos rechaza el dato.

Comparte esta lección:

¿Cómo se relacionan las tablas entre sí? | Introducción a las Bases de Datos | Certmundo