Bases de Datos ha sido la asignatura que más gente ha suspendido en mi clase, y para mí ha sido justo al revés: la que más me ha gustado y la que mejor se me ha dado entender. Y casi siempre el punto donde la gente empieza a perderse es aquí, en la clave primaria — un concepto que parece trivial explicado en dos frases, pero que si no lo entiendes bien te arrastra confusión durante el resto del temario, porque todo lo demás (claves foráneas, relaciones, índices) se construye encima.

Qué es una clave primaria

Una clave primaria (primary key) es la columna, o conjunto de columnas, que identifica de forma única cada fila de una tabla. No puede haber dos filas con el mismo valor de clave primaria, y ese valor no puede quedar vacío (NULL) nunca.

CREATE TABLE alumnos (
  id INT PRIMARY KEY,
  nombre VARCHAR(100),
  curso VARCHAR(20)
);

Aquí, id es la clave primaria. Cada alumno tiene un id distinto, y la base de datos se encarga de impedir que insertes dos filas con el mismo id, o una fila sin id.

Las dos reglas que definen una clave primaria

Toda clave primaria cumple, sin excepción, estas dos condiciones:

  1. Unicidad. Ningún valor se repite entre filas distintas.
  2. No nulidad. Ningún valor puede quedar vacío.

Si intentas romper cualquiera de las dos, el motor de base de datos te lo impide con un error, no es una recomendación de estilo, es una restricción que se aplica a nivel de motor.

INSERT INTO alumnos (id, nombre, curso) VALUES (1, 'Ana', 'ASIR');
INSERT INTO alumnos (id, nombre, curso) VALUES (1, 'Luis', 'DAM');
-- Error: clave duplicada, viola la restricción PRIMARY KEY

Por qué hace falta una clave primaria

Sin una forma de identificar filas de manera única, no puedes referenciarlas con seguridad desde ningún otro sitio. Imagina una tabla alumnos sin clave primaria y con dos personas llamadas “Ana García” en cursos distintos. Si otra tabla necesita decir “esta nota es de Ana García”, ¿de cuál de las dos habla? La clave primaria resuelve esa ambigüedad de raíz: nunca dos filas comparten el mismo identificador, así que siempre puedes apuntar a una fila exacta sin dudas.

Esto además es lo que hace posible las claves foráneas en otras tablas (el tema hermano de este artículo): una clave foránea siempre apunta a la clave primaria de otra tabla, precisamente porque es el único valor garantizado como único.

Clave primaria simple vs clave primaria compuesta

Lo normal es usar una sola columna como clave primaria (simple), casi siempre un número autoincremental sin significado propio (id). Pero a veces la clave primaria está formada por varias columnas a la vez (compuesta), y solo la combinación de todas ellas es única.

CREATE TABLE matriculas (
  alumno_id INT,
  asignatura_id INT,
  curso_academico VARCHAR(9),
  PRIMARY KEY (alumno_id, asignatura_id, curso_academico)
);

Aquí ningún campo por separado es único (el mismo alumno puede tener varias matrículas, la misma asignatura la cursa mucha gente), pero la combinación de los tres sí lo es: un alumno no puede matricularse dos veces en la misma asignatura el mismo curso académico.

El error típico: confundir clave primaria con “un campo importante”

Es el fallo que más veces he visto cometer a compañeros de clase: pensar que la clave primaria tiene que ser un dato con significado, como el DNI o el email. Funcionalmente puede serlo (el DNI es único y no suele estar vacío), pero en la práctica casi siempre es mejor usar un identificador artificial (id INT AUTO_INCREMENT, o SERIAL en PostgreSQL) sin ningún significado real, por dos motivos:

  • Los datos “reales” cambian. Un DNI se puede corregir por un error de tecleo, un email se puede actualizar. Si ese valor es la clave primaria, cambiarlo obliga a actualizar todas las tablas que lo referencian como clave foránea. Un id autoincremental nunca cambia.
  • No siempre son tan únicos como parecen. Dos personas de países distintos pueden compartir formato de documento, o directamente no tener DNI español. Un identificador artificial no depende de reglas externas que se te pueden escapar.

Clave primaria en la tabla, visto de un vistazo

Cumple siempre
¿Puede repetirse un valor?No
¿Puede quedar vacío (NULL)?No
¿Puede haber más de una clave primaria por tabla?No (pero sí compuesta por varias columnas)
¿Se puede cambiar el valor de la clave?Técnicamente sí, pero se desaconseja si hay claves foráneas apuntando a ella

Pon a prueba lo que has entendido

Tienes una tabla `productos` con las columnas `codigo_barras` y `nombre`. Todos los productos tienen un código de barras distinto y ninguno está vacío. ¿Podría ser `codigo_barras` una clave primaria válida?

Resumen rápido

Una clave primaria identifica cada fila de una tabla de forma única, sin repeticiones y sin valores vacíos. Puede ser una sola columna o una combinación de varias (clave compuesta), y lo habitual es usar un identificador artificial (id) en vez de un dato “real” como el DNI o el email, porque los datos reales cambian y el id no. Es la pieza que hace posible que otras tablas puedan referenciar filas concretas de manera fiable — que es exactamente lo que hace una clave foránea, el siguiente paso natural una vez entiendes esto: qué es una clave foránea en bases de datos.

Si además quieres ver cómo se usa una clave primaria en la práctica dentro de una consulta guardada, tienes el ejemplo en diferencia entre una vista y una tabla en SQL.