Blog

Claves Primarias, Claves Foráneas, Índices y Restricciones en DB2: Guía Completa


Cuando diseñamos una base de datos en DB2, es esencial entender cómo estructurar las tablas para garantizar integridad, rendimiento y relaciones entre los datos. En esta entrada, exploraremos las claves primarias, claves foráneas, índices y restricciones en DB2, con ejemplos prácticos y una comparativa para facilitar su comprensión.


Claves Primarias (Primary Keys)

Una clave primaria identifica de forma única cada fila de una tabla. Solo puede haber una clave primaria por tabla, y sus valores no pueden ser nulos ni repetidos.

Ejemplo

CREATE TABLE EMPLEADOS (
    EMP_ID INT NOT NULL,
    NOMBRE VARCHAR(50),
    DEPARTAMENTO_ID INT,
    PRIMARY KEY (EMP_ID)
);

En este ejemplo, la columna EMP_ID es la clave primaria. Esto asegura que cada empleado tenga un identificador único.


Claves Foráneas (Foreign Keys)

Una clave foránea establece una relación entre dos tablas, vinculando la clave primaria de una tabla con una columna de otra tabla. Esto es clave para modelar relaciones como «uno a muchos» o «muchos a muchos».

Ejemplo

CREATE TABLE DEPARTAMENTOS (
    DEP_ID INT NOT NULL,
    NOMBRE VARCHAR(50),
    PRIMARY KEY (DEP_ID)
);

CREATE TABLE EMPLEADOS (
    EMP_ID INT NOT NULL,
    NOMBRE VARCHAR(50),
    DEPARTAMENTO_ID INT,
    PRIMARY KEY (EMP_ID),
    FOREIGN KEY (DEPARTAMENTO_ID) REFERENCES DEPARTAMENTOS (DEP_ID)
);

Aquí, DEPARTAMENTO_ID en la tabla EMPLEADOS es una clave foránea que referencia a DEP_ID en DEPARTAMENTOS. Esto garantiza que un empleado solo pueda estar asignado a un departamento existente.


Índices (Indexes)

Los índices mejoran el rendimiento de las consultas al permitir accesos rápidos a las filas de una tabla. Pueden ser únicos o no únicos y se utilizan comúnmente en columnas frecuentemente buscadas.

Ejemplo

CREATE INDEX IDX_NOMBRE_EMPLEADO ON EMPLEADOS (NOMBRE);

Este índice acelera las búsquedas en la columna NOMBRE de la tabla EMPLEADOS. Si necesitas evitar valores duplicados, usa un índice único:

CREATE UNIQUE INDEX IDX_EMPLEADO_UNICO ON EMPLEADOS (EMP_ID);

Tipos de Restricciones

Las restricciones aseguran la integridad de los datos en las tablas. DB2 soporta varios tipos de restricciones:

  • NOT NULL: Evita que una columna contenga valores nulos.
  • UNIQUE: Garantiza que todos los valores de una columna sean únicos.
  • PRIMARY KEY: Combina las restricciones NOT NULL y UNIQUE.
  • FOREIGN KEY: Garantiza que los valores en una columna coincidan con valores en otra tabla.
  • CHECK: Define una condición que los valores de una columna deben cumplir.

Ejemplo

CREATE TABLE PRODUCTOS (
    PRODUCTO_ID INT NOT NULL,
    NOMBRE VARCHAR(50) NOT NULL,
    PRECIO DECIMAL(10, 2) CHECK (PRECIO > 0),
    PRIMARY KEY (PRODUCTO_ID)
);

En este caso:

  • NOT NULL asegura que PRODUCTO_ID y NOMBRE siempre tengan valores.
  • CHECK (PRECIO > 0) asegura que los precios sean positivos.

Comparativa

ConceptoFunciónRestricciones Asociadas
Clave PrimariaIdentifica filas únicasPRIMARY KEY, NOT NULL
Clave ForáneaRelaciona tablasFOREIGN KEY
ÍndicesMejora el rendimiento de las consultasUNIQUE (opcional)
RestriccionesGarantizan la integridad de los datosNOT NULL, UNIQUE, CHECK

Entender y aplicar correctamente estos conceptos es fundamental para construir bases de datos robustas en DB2. Si tienes dudas o ejemplos adicionales, no dudes en dejarlos en los comentarios. ¡Espero que esta guía sea útil!