viernes, 31 de julio de 2026

馃悩 La Restricci贸n PRIMARY KEY en PostgreSQL

Hasta ahora hemos estudiado varias restricciones importantes:

  • NOT NULL

  • DEFAULT

  • UNIQUE

Todas ellas ayudan a mejorar la calidad de los datos, pero a煤n queda una pregunta fundamental:

¿C贸mo identificamos de manera 煤nica cada registro dentro de una tabla?

Para resolver este problema PostgreSQL utiliza la restricci贸n PRIMARY KEY.


馃 ¿Qu茅 es una PRIMARY KEY?

Una Primary Key (Clave Primaria) es una columna, o conjunto de columnas, que identifica de forma 煤nica cada fila de una tabla.

En otras palabras:

✅ Cada valor debe ser 煤nico.

✅ No puede ser NULL.

✅ Permite identificar exactamente un registro.

Por ejemplo, en una tabla de empleados:

id

nombre

1

Juan P茅rez

2

Ana L贸pez

3

Carlos Garc铆a

La columna id puede utilizarse como clave primaria porque cada valor es 煤nico y permite localizar un registro espec铆fico.


馃幆 ¿Por qu茅 es importante?

Las claves primarias son fundamentales porque:

  • Identifican registros de forma 煤nica.

  • Evitan duplicados.

  • Facilitan las b煤squedas.

  • Sirven como base para las relaciones entre tablas.

  • Ayudan a mantener la integridad de los datos.

Pr谩cticamente toda tabla deber铆a tener una clave primaria.


馃攳 PRIMARY KEY = UNIQUE + NOT NULL

Conceptualmente, una clave primaria combina dos reglas:

PRIMARY KEY

=

UNIQUE

+

NOT NULL


Por lo tanto:

✅ Los valores no pueden repetirse.

✅ Los valores no pueden ser nulos.


馃彈️ Definir una PRIMARY KEY sobre una columna

La forma m谩s sencilla es definirla junto con la columna.

CREATE TABLE empleados (

    id INTEGER PRIMARY KEY,

    nombre VARCHAR(100),

    departamento VARCHAR(100)

);


En este caso:

  • id es la clave primaria.

  • Cada empleado debe tener un ID 煤nico.


✅ Insertar registros v谩lidos

INSERT INTO empleados (

    id,

    nombre,

    departamento

)

VALUES

(

    1,

    'Juan P茅rez',

    'Tecnolog铆a'

),

(

    2,

    'Ana L贸pez',

    'Finanzas'

);


Consultar:

SELECT *

FROM empleados;


Resultado:

id | nombre      | departamento

----+-------------+-------------

 1  | Juan P茅rez  | Tecnolog铆a

 2  | Ana L贸pez   | Finanzas



❌ Intentar insertar una PRIMARY KEY duplicada

Ahora intentemos insertar un registro con un ID ya existente.

INSERT INTO empleados (

    id,

    nombre,

    departamento

)

VALUES (

    1,

    'Carlos Garc铆a',

    'Ventas'

);


PostgreSQL devolver谩 un error similar a:

ERROR: duplicate key value violates unique constraint


Esto ocurre porque ya existe un registro con:

id = 1



❌ Intentar insertar NULL

Tampoco se permiten valores nulos.

INSERT INTO empleados (

    id,

    nombre

)

VALUES (

    NULL,

    'Roberto Mart铆nez'

);


Resultado:

ERROR: null value in column "id"

violates not-null constraint



馃彈️ PRIMARY KEY a Nivel de Tabla

Tambi茅n es posible declarar la clave primaria al final de la definici贸n de la tabla.

Sin nombre expl铆cito

CREATE TABLE empleados (

    id INTEGER,

    nombre VARCHAR(100),

    departamento VARCHAR(100),


    PRIMARY KEY (id)

);



Con nombre expl铆cito (recomendado)

Al igual que vimos con UNIQUE, podemos asignar un nombre a la restricci贸n.

CREATE TABLE empleados (

    id INTEGER,

    nombre VARCHAR(100),

    departamento VARCHAR(100),


    CONSTRAINT pk_empleados

        PRIMARY KEY (id)

);


Beneficios:

  • Mayor claridad.

  • Administraci贸n m谩s sencilla.

  • Mensajes de error m谩s entendibles.

  • Facilita futuras modificaciones.


馃搵 Convenci贸n de nombres recomendada

Es com煤n utilizar el prefijo:

pk_


seguido del nombre de la tabla.

Ejemplos:

pk_usuarios

pk_productos

pk_clientes

pk_empleados

pk_facturas



馃И Ejemplo Completo

Crear tabla

CREATE TABLE productos (

    codigo INTEGER,


    nombre VARCHAR(100),


    precio NUMERIC(10,2),


    CONSTRAINT pk_productos

        PRIMARY KEY (codigo)

);



Insertar datos v谩lidos

INSERT INTO productos (

    codigo,

    nombre,

    precio

)

VALUES

(

    1001,

    'Laptop',

    18000.00

),

(

    1002,

    'Monitor',

    4500.00

);


Consultar:

SELECT *

FROM productos;


Resultado:

codigo | nombre   | precio

--------+----------+----------

 1001   | Laptop   | 18000.00

 1002   | Monitor  | 4500.00



Intentar insertar un c贸digo duplicado

INSERT INTO productos (

    codigo,

    nombre,

    precio

)

VALUES (

    1001,

    'Teclado',

    750.00

);


Resultado:

ERROR: duplicate key value violates unique constraint "pk_productos"



馃攽 Claves Primarias Compuestas

Una Primary Key tambi茅n puede estar formada por varias columnas.

Esto se conoce como clave primaria compuesta.


Ejemplo

Supongamos una tabla de inscripciones.

CREATE TABLE inscripciones (

    alumno_id INTEGER,

    curso_id INTEGER,

    fecha_inscripcion DATE,


    CONSTRAINT pk_inscripciones

        PRIMARY KEY (

            alumno_id,

            curso_id

        )

);


En este caso:

  • Un alumno puede estar en muchos cursos.

  • Un curso puede tener muchos alumnos.

  • La combinaci贸n alumno-curso debe ser 煤nica.


Registros v谩lidos

INSERT INTO inscripciones

VALUES

(

    1,

    10,

    '2026-07-01'

),

(

    1,

    20,

    '2026-07-02'

);



Registro inv谩lido

INSERT INTO inscripciones

VALUES

(

    1,

    10,

    '2026-07-03'

);


Resultado:

ERROR: duplicate key value violates unique constraint


Porque la combinaci贸n:

(1,10)


ya existe.


馃敡 Agregar una PRIMARY KEY a una tabla existente

Si la tabla ya fue creada:

ALTER TABLE empleados

ADD CONSTRAINT pk_empleados

PRIMARY KEY (id);



馃敡 Eliminar una PRIMARY KEY

ALTER TABLE empleados

DROP CONSTRAINT pk_empleados;



⚠️ ¿Cu谩ntas PRIMARY KEY puede tener una tabla?

Una tabla puede tener:

✅ Una 煤nica Primary Key.

❌ No puede tener dos Primary Keys.

Por ejemplo:

CREATE TABLE ejemplo (

    id INTEGER PRIMARY KEY,

    codigo INTEGER PRIMARY KEY

);


Esto generar谩 un error.

Si necesitas controlar la unicidad de otras columnas, utiliza UNIQUE.


馃挕 Buenas pr谩cticas

Toda tabla deber铆a tener una Primary Key

✅ Recomendado

CREATE TABLE clientes (

    id INTEGER PRIMARY KEY,

    nombre VARCHAR(100)

);



Utiliza nombres descriptivos

cliente_id

producto_id

empleado_id

factura_id


suelen ser m谩s claros que:

id1

id2

codigo



Asigna nombres a las restricciones

CONSTRAINT pk_clientes

PRIMARY KEY (cliente_id)


Esto simplifica el mantenimiento del esquema.


Mant茅n la Primary Key estable

Evita utilizar columnas cuyos valores puedan cambiar con frecuencia.

Por ejemplo:

email

telefono

username


cliente_id

empleado_id

producto_id



✅ Conclusi贸n

La restricci贸n PRIMARY KEY es uno de los conceptos m谩s importantes de PostgreSQL y de las bases de datos relacionales en general.

Los puntos clave son:

  • Identifica de forma 煤nica cada registro.

  • No permite valores duplicados.

  • No permite valores nulos.

  • Cada tabla puede tener una sola Primary Key.

  • Puede estar formada por una o varias columnas.

  • Es recomendable asignar nombres expl铆citos a la restricci贸n utilizando la palabra clave CONSTRAINT.

  • Constituye la base para crear relaciones entre tablas.

No hay comentarios:

Publicar un comentario

Cap铆tulo 2. ¿Qu茅 es Angular?