Introducción

En este tema, aprenderemos sobre dos conceptos fundamentales en el diseño de bases de datos relacionales: las claves primarias y las claves foráneas. Estos conceptos son esenciales para garantizar la integridad y la relación entre los datos en diferentes tablas.

Claves Primarias

¿Qué es una Clave Primaria?

Una clave primaria es un campo (o una combinación de campos) en una tabla que se utiliza para identificar de manera única cada fila en esa tabla. Las características principales de una clave primaria son:

  • Unicidad: Cada valor en la clave primaria debe ser único.
  • No Nulo: Los valores de la clave primaria no pueden ser nulos.

Creación de una Clave Primaria

Para definir una clave primaria en PostgreSQL, se utiliza la cláusula PRIMARY KEY al crear una tabla. Veamos un ejemplo:

CREATE TABLE empleados (
    empleado_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    puesto VARCHAR(50) NOT NULL,
    salario DECIMAL(10, 2) NOT NULL
);

En este ejemplo:

  • empleado_id es la clave primaria de la tabla empleados.
  • SERIAL es un tipo de dato que genera automáticamente un número secuencial único para cada fila.

Claves Primarias Compuestas

En algunos casos, una sola columna no es suficiente para identificar de manera única una fila. En tales situaciones, se puede utilizar una clave primaria compuesta, que consiste en más de una columna.

CREATE TABLE inscripciones (
    estudiante_id INT,
    curso_id INT,
    fecha_inscripcion DATE,
    PRIMARY KEY (estudiante_id, curso_id)
);

En este ejemplo, la combinación de estudiante_id y curso_id se utiliza como clave primaria.

Claves Foráneas

¿Qué es una Clave Foránea?

Una clave foránea es un campo (o una combinación de campos) en una tabla que se utiliza para establecer y reforzar un vínculo entre los datos de dos tablas. La clave foránea en una tabla apunta a una clave primaria en otra tabla, creando una relación entre las dos tablas.

Creación de una Clave Foránea

Para definir una clave foránea en PostgreSQL, se utiliza la cláusula FOREIGN KEY. Veamos un ejemplo:

CREATE TABLE departamentos (
    departamento_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL
);

CREATE TABLE empleados (
    empleado_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    puesto VARCHAR(50) NOT NULL,
    salario DECIMAL(10, 2) NOT NULL,
    departamento_id INT,
    FOREIGN KEY (departamento_id) REFERENCES departamentos(departamento_id)
);

En este ejemplo:

  • departamento_id en la tabla empleados es una clave foránea que referencia a departamento_id en la tabla departamentos.

Integridad Referencial

La integridad referencial asegura que los valores de la clave foránea en una tabla deben coincidir con los valores de la clave primaria en la tabla referenciada. PostgreSQL proporciona varias acciones que se pueden tomar cuando se actualiza o elimina una fila en la tabla referenciada:

  • ON DELETE CASCADE: Elimina las filas en la tabla hija cuando se elimina la fila en la tabla padre.
  • ON UPDATE CASCADE: Actualiza las filas en la tabla hija cuando se actualiza la fila en la tabla padre.
  • ON DELETE SET NULL: Establece la clave foránea en NULL cuando se elimina la fila en la tabla padre.
  • ON DELETE RESTRICT: Impide la eliminación de la fila en la tabla padre si hay filas relacionadas en la tabla hija.

Ejemplo:

CREATE TABLE empleados (
    empleado_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    puesto VARCHAR(50) NOT NULL,
    salario DECIMAL(10, 2) NOT NULL,
    departamento_id INT,
    FOREIGN KEY (departamento_id) REFERENCES departamentos(departamento_id)
    ON DELETE CASCADE
);

Ejercicios Prácticos

Ejercicio 1: Crear Tablas con Claves Primarias y Foráneas

  1. Crea una tabla clientes con las siguientes columnas:

    • cliente_id (clave primaria, tipo SERIAL)
    • nombre (tipo VARCHAR(100))
    • email (tipo VARCHAR(100))
  2. Crea una tabla pedidos con las siguientes columnas:

    • pedido_id (clave primaria, tipo SERIAL)
    • fecha_pedido (tipo DATE)
    • cliente_id (clave foránea que referencia a cliente_id en la tabla clientes)

Solución

CREATE TABLE clientes (
    cliente_id SERIAL PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL
);

CREATE TABLE pedidos (
    pedido_id SERIAL PRIMARY KEY,
    fecha_pedido DATE NOT NULL,
    cliente_id INT,
    FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
);

Ejercicio 2: Integridad Referencial

  1. Modifica la tabla pedidos para que, cuando se elimine un cliente, también se eliminen todos sus pedidos.

Solución

CREATE TABLE pedidos (
    pedido_id SERIAL PRIMARY KEY,
    fecha_pedido DATE NOT NULL,
    cliente_id INT,
    FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
    ON DELETE CASCADE
);

Conclusión

En esta sección, hemos aprendido sobre las claves primarias y foráneas, su importancia en el diseño de bases de datos y cómo implementarlas en PostgreSQL. Estos conceptos son fundamentales para mantener la integridad y la relación entre los datos en una base de datos relacional. En el próximo módulo, exploraremos más sobre el diseño de bases de datos y la normalización.

Curso de PostgreSQL

Módulo 1: Introducción a PostgreSQL

Módulo 2: Operaciones Básicas de SQL

Módulo 3: Consultas Avanzadas de SQL

Módulo 4: Diseño de Bases de Datos y Normalización

Módulo 5: Características Avanzadas de PostgreSQL

Módulo 6: Ajuste de Rendimiento y Optimización

Módulo 7: Seguridad y Gestión de Usuarios

Módulo 8: Trabajando con JSON y Características NoSQL

Módulo 9: Extensiones y Herramientas Avanzadas

Módulo 10: Estudios de Caso y Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados