📘 Lección 15: Claves y restricciones en SQL

🔹 Introducción

Cuando diseñamos una base de datos no basta con crear tablas y guardar datos.
Necesitamos reglas que aseguren que esos datos sean correctos y coherentes.

👉 Ahí entran las claves y restricciones:

Estas restricciones son como las reglas de tráfico de los datos:
permiten que circulen ordenados y sin choques 🚦.

🔹 Nuestra tabla de ejemplo

Usaremos una base de datos de empleados y departamentos:

CREATE TABLE departamentos (
  id INT PRIMARY KEY,
  nombre VARCHAR(50) NOT NULL
);

CREATE TABLE empleados (
  id INT PRIMARY KEY,
  nombre VARCHAR(50) NOT NULL,
  email VARCHAR(100) UNIQUE,
  salario DECIMAL(10,2) DEFAULT 1000.00,
  departamento_id INT,
  FOREIGN KEY (departamento_id) REFERENCES departamentos(id)
);

👉 Observá que:

  1. departamentos.id es PRIMARY KEY.
  2. empleados.id es PRIMARY KEY.
  3. empleados.nombre es NOT NULL (obligatorio).
  4. empleados.email es UNIQUE (no se repite).
  5. empleados.salario tiene un DEFAULT de 1000.
  6. empleados.departamento_id es FOREIGN KEY, conecta con departamentos.

🔹 Ejemplo 1: PRIMARY KEY

Una clave primaria identifica de forma única a cada fila.

CREATE TABLE alumnos (
  id INT PRIMARY KEY,
  nombre VARCHAR(50)
);

👉 No puede haber dos alumnos con el mismo id.

🔹 Ejemplo 2: NOT NULL

Evita valores vacíos en una columna.

CREATE TABLE productos (
  id INT PRIMARY KEY,
  nombre VARCHAR(50) NOT NULL
);

👉 Si intentás insertar un producto sin nombre, dará error.

🔹 Ejemplo 3: UNIQUE

Asegura que no existan valores duplicados.

CREATE TABLE clientes (
  id INT PRIMARY KEY,
  email VARCHAR(100) UNIQUE
);

👉 Dos clientes no pueden compartir el mismo email.

🔹 Ejemplo 4: DEFAULT

Asigna un valor por defecto si no se especifica.

CREATE TABLE cuentas (
  id INT PRIMARY KEY,
  saldo DECIMAL(10,2) DEFAULT 0
);

👉 Si no indicás saldo, se guarda automáticamente 0.

🔹 Ejemplo 5: FOREIGN KEY

Crea relaciones entre tablas.
Ejemplo: un empleado pertenece a un departamento.

INSERT INTO departamentos (id, nombre) VALUES (1, 'Recursos Humanos');
INSERT INTO empleados (id, nombre, departamento_id) VALUES (1, 'Laura', 1);

👉 La columna departamento_id debe existir en la tabla departamentos.
Si intentás insertar un departamento que no existe, obtendrás error.

🔹 Ejercicio práctico

  1. Crea una tabla categorias con id (clave primaria) y nombre (NOT NULL).
  2. Crea una tabla productos con:
    • id (PRIMARY KEY).
    • nombre (NOT NULL).
    • precio (DEFAULT 10).
    • categoria_id (FOREIGN KEY → categorias.id).
  3. Inserta un producto sin especificar precio.
  4. Intenta insertar dos categorías con el mismo id (¿qué pasa?).
  5. Intenta insertar un producto en una categoría que no existe.

🔹 Soluciones

CREATE TABLE categorias (
  id INT PRIMARY KEY,
  nombre VARCHAR(50) NOT NULL
);

CREATE TABLE productos (
  id INT PRIMARY KEY,
  nombre VARCHAR(50) NOT NULL,
  precio DECIMAL(10,2) DEFAULT 10,
  categoria_id INT,
  FOREIGN KEY (categoria_id) REFERENCES categorias(id)
);

-- Insertar categoría
INSERT INTO categorias (id, nombre) VALUES (1, 'Tecnología');

-- Insertar producto sin precio (se asigna el default)
INSERT INTO productos (id, nombre, categoria_id) VALUES (1, 'Mouse', 1);

-- Intento fallido: dos categorías con el mismo id
INSERT INTO categorias (id, nombre) VALUES (1, 'Ropa'); -- ❌ error

-- Intento fallido: producto en categoría inexistente
INSERT INTO productos (id, nombre, categoria_id) VALUES (2, 'Teclado', 99); -- ❌ error

🔹 Mini Quiz

 

Resultados

#1. ¿Qué restricción asegura que cada fila de la tabla sea única?

#2. ¿Qué pasa si intento insertar dos filas con el mismo valor en una columna UNIQUE?

#3. ¿Cuál es la función de una FOREIGN KEY?

Previa
Finalizar

🔹 Resumen de la lección

Hoy aprendiste que las restricciones en SQL son reglas que garantizan la calidad de los datos:

  • PRIMARY KEY → identifica cada fila.
  • NOT NULL → evita valores vacíos.
  • UNIQUE → impide duplicados.
  • DEFAULT → asigna valores automáticos.
  • FOREIGN KEY → conecta tablas y asegura integridad.

👉 En la próxima lección veremos cómo usar índices para mejorar el rendimiento de las consultas.

🏆 Este tema es parte de un curso completo. Descubre más lecciones en el Curso SQL.

Scroll al inicio