Curso de MySQL

MySQL como base de datos relacional: tablas y relaciones

Por Víctor Peña · Publicado el

MySQL como base de datos relacional

Hola, ¿cómo están? Continuando con el curso de MySQL, hoy veremos qué significa exactamente que una base de datos sea relacional. Es el concepto sobre el que se apoya todo lo demás.

¡Empecemos!

El modelo relacional

El modelo relacional propone algo muy simple: organizar la información en tablas que se conectan entre sí.

Cada tabla representa una entidad del mundo real —clientes, productos, pedidos— y guarda solo lo que corresponde a esa entidad. Cuando dos tablas necesitan relacionarse, se enlazan mediante una clave.

Suena básico, pero resuelve un problema muy concreto que se ve mejor con un contraejemplo.

El problema de guardarlo todo junto

Imagina una sola tabla con todos los pedidos:

id cliente telefono_cliente ciudad producto precio
1 Ana Torres 76980507 Cochabamba Teclado 120
2 Ana Torres 76980507 Cochabamba Monitor 850
3 Ana Torres 76980507 Cochabamba Mouse 60

Los datos de Ana están repetidos tres veces. Y ahí empiezan los problemas:

  • Si cambia de teléfono, hay que actualizarlo en las tres filas. Si olvidas una, tienes dos versiones de la verdad.
  • Ocupa espacio innecesario.
  • Si borras el pedido, pierdes también los datos del cliente.
  • Nada impide escribirlo distinto: «Ana Torres» en una fila y «ana torres» en otra son dos clientes para la base de datos.

La solución relacional

Se separa en dos tablas:

clientes

id nombre telefono ciudad
1 Ana Torres 76980507 Cochabamba

pedidos

id cliente_id producto precio
1 1 Teclado 120
2 1 Monitor 850
3 1 Mouse 60

Los datos de Ana están una sola vez. Los pedidos la referencian con cliente_id.

Si cambia de teléfono, se actualiza en un solo lugar y todos los pedidos reflejan el cambio automáticamente. Ese proceso de separar para eliminar redundancia se llama normalización.

Los elementos de una tabla

Tabla. El contenedor de un tipo de información. También se le llama relación, de ahí el nombre del modelo.

Fila o registro. Una ocurrencia concreta: un cliente, un pedido.

Columna o campo. Una característica: el nombre, el teléfono. Cada columna tiene un tipo de dato definido, que veremos más adelante.

Clave primaria. La columna que identifica de forma única cada fila. Normalmente un id numérico que se incrementa solo. No puede repetirse ni estar vacía.

Clave foránea. Una columna que apunta a la clave primaria de otra tabla. En el ejemplo, pedidos.cliente_id es clave foránea hacia clientes.id.

Los tres tipos de relación

Uno a uno (1:1)

Un registro de una tabla se corresponde con exactamente uno de la otra.

Una persona tiene un carnet de identidad, y ese carnet pertenece a una sola persona.

Es la menos frecuente. Suele usarse para separar datos que se consultan poco o que son sensibles.

Uno a muchos (1:N)

Un registro de una tabla se relaciona con varios de la otra, pero no al revés.

Un cliente realiza muchos pedidos, y cada pedido pertenece a un solo cliente.

Es la más común de todas. La clave foránea se guarda siempre en el lado «muchos»: la tabla pedidos lleva la columna cliente_id.

Muchos a muchos (N:M)

Los registros de ambos lados se relacionan con varios del otro.

Un pedido incluye varios productos, y cada producto aparece en varios pedidos.

Aquí hay una regla importante: este tipo de relación no se puede representar directamente. Necesita una tercera tabla, llamada tabla intermedia o pivote:

pedido_producto

pedido_id producto_id cantidad
1 5 2
1 8 1
2 5 3

Esa tabla convierte un muchos a muchos en dos relaciones uno a muchos. Y fíjate en algo útil: puede llevar datos propios, como la cantidad, que no pertenecen ni al pedido ni al producto sino a la combinación de ambos.

Leer las relaciones en los dos sentidos

Un truco que evita la mayoría de los errores de diseño: enuncia siempre la relación en ambas direcciones.

  • «Un cliente tiene muchos pedidos» → parece muchos a muchos.
  • «Un pedido pertenece a un solo cliente» → ahora está claro: es uno a muchos.

Si ambas frases dicen «muchos», entonces sí es una relación N:M y necesitas tabla intermedia.

La integridad referencial

Cuando declaras una clave foránea, MySQL se encarga de que la relación tenga sentido:

  • No puedes crear un pedido con un cliente_id que no existe.
  • No puedes borrar un cliente que tiene pedidos, salvo que definas qué debe pasar con ellos.

Eso se llama integridad referencial, y es una de las principales razones para usar una base de datos relacional en vez de archivos sueltos: el propio motor impide que los datos queden incoherentes.

Los motores de almacenamiento

MySQL permite elegir cómo se guardan las tablas. Los dos principales:

InnoDB MyISAM
Claves foráneas No
Transacciones No
Bloqueo Por fila Por tabla

Usa InnoDB, que además es el predeterminado desde hace años. MyISAM solo aparece en sistemas antiguos, y no soporta ni relaciones ni transacciones, que es justamente lo que hace útil a una base de datos relacional.

Para cerrar

Que MySQL sea relacional significa que la información vive separada en tablas y se conecta mediante claves, evitando duplicados y manteniendo la coherencia.

Las tres ideas que hay que retener: la clave foránea va en el lado «muchos», el muchos a muchos siempre necesita tabla intermedia, y las relaciones se leen en los dos sentidos.

En la siguiente lección veremos cómo diseñar todo esto antes de escribir una sola tabla.

Saludos y éxitos.

Norvic Software

Desarrollamos el software que tu empresa necesita

Somos una fábrica de software en Bolivia. Construimos sistemas a medida y aplicaciones móviles, y llevamos Inteligencia Artificial a las empresas que ya tienen un sistema funcionando.

Solicitar cotizaciónVer todos los servicios

Cotización sin costo · Respuesta directa por WhatsApp