SQL
Tutorial SQL: Relaciones entre tablas
Aprende los tipos de relaciones, claves y diseño relacional para bases de datos eficientes y con integridad de datos garantizada.
Aprende SQL y certifícateTipos de relaciones
Las bases de datos relacionales se fundamentan en la capacidad de establecer conexiones entre diferentes tablas para representar relaciones del mundo real. Estas relaciones permiten estructurar los datos de manera lógica y eficiente, evitando la redundancia y facilitando la integridad de la información.
Relaciones según cardinalidad
La cardinalidad define cuántos registros de una tabla pueden estar asociados con registros de otra tabla. Existen tres tipos fundamentales de relaciones según su cardinalidad:
- 1. Relación uno a uno (1:1): Cada registro en la tabla A se relaciona con exactamente un registro en la tabla B, y viceversa. Este tipo de relación es la menos común en diseños de bases de datos.
-- Ejemplo: Un empleado tiene una única credencial de acceso
CREATE TABLE empleados (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(100),
departamento VARCHAR(50)
);
CREATE TABLE credenciales (
credencial_id INT PRIMARY KEY,
empleado_id INT UNIQUE,
codigo_acceso VARCHAR(20),
fecha_emision DATE,
FOREIGN KEY (empleado_id) REFERENCES empleados(empleado_id)
);
En este ejemplo, la palabra clave UNIQUE garantiza que cada empleado solo pueda tener una credencial asociada.
- 2. Relación uno a muchos (1:N): Cada registro en la tabla A puede estar relacionado con varios registros en la tabla B, pero cada registro en B está relacionado con exactamente un registro en A. Este es el tipo de relación más común en bases de datos relacionales.
-- Ejemplo: Un departamento tiene muchos empleados
CREATE TABLE departamentos (
departamento_id INT PRIMARY KEY,
nombre VARCHAR(50),
ubicacion VARCHAR(100)
);
CREATE TABLE empleados (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(100),
departamento_id INT,
FOREIGN KEY (departamento_id) REFERENCES departamentos(departamento_id)
);
En este caso, la tabla empleados
contiene una clave foránea que referencia a la tabla departamentos
, permitiendo que un departamento tenga múltiples empleados asociados.
- 3. Relación muchos a muchos (N:M): Cada registro en la tabla A puede relacionarse con varios registros en la tabla B, y viceversa. Este tipo de relación requiere una tabla intermedia (también llamada tabla de unión o tabla pivote) para implementarse correctamente.
-- Ejemplo: Estudiantes y cursos (un estudiante puede tomar varios cursos
-- y un curso puede tener varios estudiantes)
CREATE TABLE estudiantes (
estudiante_id INT PRIMARY KEY,
nombre VARCHAR(100),
email VARCHAR(100)
);
CREATE TABLE cursos (
curso_id INT PRIMARY KEY,
nombre VARCHAR(100),
creditos INT
);
CREATE TABLE inscripciones (
estudiante_id INT,
curso_id INT,
fecha_inscripcion DATE,
calificacion DECIMAL(4,2),
PRIMARY KEY (estudiante_id, curso_id),
FOREIGN KEY (estudiante_id) REFERENCES estudiantes(estudiante_id),
FOREIGN KEY (curso_id) REFERENCES cursos(curso_id)
);
La tabla inscripciones
actúa como tabla intermedia que contiene claves foráneas a ambas tablas principales, permitiendo establecer la relación muchos a muchos.
Relaciones según dependencia
Además de la cardinalidad, las relaciones pueden clasificarse según la dependencia entre las entidades:
- 1. Relación fuerte (identificativa): La existencia de una entidad depende completamente de otra. Si se elimina el registro principal, los registros dependientes también deben eliminarse.
-- Ejemplo: Relación fuerte entre pedidos y detalles de pedido
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
cliente_id INT,
fecha_pedido DATE
);
CREATE TABLE detalles_pedido (
pedido_id INT,
linea_num INT,
producto_id INT,
cantidad INT,
precio_unitario DECIMAL(10,2),
PRIMARY KEY (pedido_id, linea_num),
FOREIGN KEY (pedido_id) REFERENCES pedidos(pedido_id) ON DELETE CASCADE
);
La cláusula ON DELETE CASCADE indica que si se elimina un pedido, todos sus detalles asociados también serán eliminados automáticamente.
- 2. Relación débil (no identificativa): La entidad dependiente tiene su propia identidad y puede existir independientemente de la entidad principal.
-- Ejemplo: Relación débil entre categorías y productos
CREATE TABLE categorias (
categoria_id INT PRIMARY KEY,
nombre VARCHAR(50)
);
CREATE TABLE productos (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100),
precio DECIMAL(10,2),
categoria_id INT,
FOREIGN KEY (categoria_id) REFERENCES categorias(categoria_id) ON DELETE SET NULL
);
En este caso, si se elimina una categoría, los productos asociados no se eliminan, sino que su categoria_id
se establece a NULL mediante la cláusula ON DELETE SET NULL.
Relaciones recursivas
Una relación recursiva ocurre cuando una tabla se relaciona consigo misma. Esto es útil para representar estructuras jerárquicas o relaciones entre entidades del mismo tipo.
-- Ejemplo: Estructura jerárquica de empleados (jefes y subordinados)
CREATE TABLE empleados (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(100),
cargo VARCHAR(50),
jefe_id INT,
FOREIGN KEY (jefe_id) REFERENCES empleados(empleado_id)
);
En este ejemplo, la columna jefe_id
es una clave foránea que referencia a la misma tabla, permitiendo establecer relaciones jerárquicas entre empleados.
Consideraciones prácticas
Al diseñar relaciones entre tablas, es importante considerar:
Integridad referencial: Las bases de datos relacionales utilizan restricciones de clave foránea para garantizar que las relaciones entre tablas sean válidas y consistentes.
Acciones referenciales: Al eliminar o actualizar registros, se pueden definir acciones como CASCADE, SET NULL, SET DEFAULT o RESTRICT para mantener la integridad de los datos.
Rendimiento: Las relaciones complejas pueden afectar el rendimiento de las consultas, por lo que es importante diseñar las relaciones considerando los patrones de acceso a los datos.
Normalización: El proceso de normalización ayuda a determinar qué relaciones son necesarias para minimizar la redundancia y maximizar la integridad de los datos.
Las relaciones bien diseñadas son fundamentales para crear bases de datos eficientes y que representen correctamente la lógica del negocio o dominio que se está modelando.
Claves y referencias
Las claves y referencias constituyen el fundamento técnico que permite implementar las relaciones entre tablas en bases de datos relacionales. Estos elementos son esenciales para mantener la integridad de los datos y establecer conexiones lógicas entre diferentes entidades.
Tipos de claves
En el diseño de bases de datos relacionales, existen varios tipos de claves que cumplen funciones específicas:
- Clave primaria (Primary Key): Identifica de manera única cada registro en una tabla. No puede contener valores nulos y debe ser única para cada fila.
CREATE TABLE clientes (
cliente_id INT PRIMARY KEY,
nombre VARCHAR(100),
email VARCHAR(100)
);
También es posible definir claves primarias compuestas, formadas por múltiples columnas:
CREATE TABLE reservas (
hotel_id INT,
habitacion_num INT,
fecha_entrada DATE,
cliente_id INT,
PRIMARY KEY (hotel_id, habitacion_num, fecha_entrada)
);
Clave candidata: Cualquier columna o conjunto de columnas que podría servir como clave primaria por cumplir las condiciones de unicidad y no nulidad. La clave primaria se selecciona entre las claves candidatas.
Clave alternativa: Son las claves candidatas que no fueron seleccionadas como clave primaria. Generalmente se implementan como restricciones UNIQUE.
CREATE TABLE usuarios (
usuario_id INT PRIMARY KEY,
nombre_usuario VARCHAR(50) UNIQUE, -- Clave alternativa
email VARCHAR(100) UNIQUE -- Otra clave alternativa
);
- Clave foránea (Foreign Key): Establece una relación entre dos tablas al referenciar la clave primaria de otra tabla. Es el mecanismo fundamental para implementar relaciones.
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
fecha DATE,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
);
Clave natural: Utiliza atributos existentes del mundo real como identificadores (por ejemplo, números de identificación personal, códigos ISBN).
Clave subrogada (o artificial): Identificador generado artificialmente que no tiene significado en el mundo real. Típicamente son valores autoincrementales o UUIDs.
-- Ejemplo con clave subrogada autoincrementada en MySQL
CREATE TABLE productos (
producto_id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100),
precio DECIMAL(10,2)
);
-- Ejemplo con clave subrogada autoincrementada en PostgreSQL
CREATE TABLE productos (
producto_id SERIAL PRIMARY KEY,
nombre VARCHAR(100),
precio DECIMAL(10,2)
);
Restricciones de integridad referencial
Las restricciones de integridad referencial garantizan que las relaciones entre tablas permanezcan válidas. Estas restricciones se implementan mediante claves foráneas y acciones referenciales:
- ON DELETE: Define qué ocurre con los registros relacionados cuando se elimina un registro referenciado:
-- Los pedidos se eliminan automáticamente si se elimina el cliente
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id) ON DELETE CASCADE
);
-- El cliente_id se establece a NULL si se elimina el cliente
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id) ON DELETE SET NULL
);
-- Impide eliminar un cliente si tiene pedidos asociados
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id) ON DELETE RESTRICT
);
- ON UPDATE: Define qué ocurre cuando se actualiza la clave primaria referenciada:
-- Actualiza automáticamente el cliente_id en pedidos si cambia en clientes
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id) ON UPDATE CASCADE
);
Implementación de claves en MySQL y PostgreSQL
Ambos sistemas de gestión de bases de datos ofrecen sintaxis similar para la implementación de claves, con algunas diferencias específicas:
- Claves primarias autoincrementales:
-- MySQL
CREATE TABLE productos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100)
);
-- PostgreSQL
CREATE TABLE productos (
id SERIAL PRIMARY KEY,
nombre VARCHAR(100)
);
- Definición de claves foráneas:
-- Sintaxis común para ambos sistemas
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
CONSTRAINT fk_cliente FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
- Añadir claves a tablas existentes:
-- Añadir clave primaria
ALTER TABLE productos ADD PRIMARY KEY (producto_id);
-- Añadir clave foránea
ALTER TABLE pedidos
ADD CONSTRAINT fk_cliente
FOREIGN KEY (cliente_id) REFERENCES clientes(id);
Índices y su relación con las claves
Las bases de datos crean automáticamente índices para las claves primarias y únicas, lo que mejora significativamente el rendimiento de las consultas:
Índices de clave primaria: Se crean automáticamente para facilitar la búsqueda rápida de registros por su identificador único.
Índices de clave foránea: No se crean automáticamente en todas las bases de datos, pero es una buena práctica crearlos manualmente para mejorar el rendimiento de las operaciones JOIN.
-- Crear índice para una clave foránea
CREATE INDEX idx_pedidos_cliente ON pedidos(cliente_id);
Consideraciones de diseño
Al trabajar con claves y referencias, es importante considerar:
- Selección de claves primarias: Preferir claves subrogadas (autoincrementales o UUIDs) sobre claves naturales para evitar problemas si los datos del mundo real cambian.
-- Mejor opción para la mayoría de casos
CREATE TABLE empleados (
id SERIAL PRIMARY KEY,
dni VARCHAR(15) UNIQUE, -- Clave natural como alternativa
nombre VARCHAR(100)
);
- Integridad de datos: Utilizar las restricciones adecuadas (NOT NULL, UNIQUE, CHECK) junto con las claves para garantizar la calidad de los datos.
CREATE TABLE productos (
id SERIAL PRIMARY KEY,
codigo VARCHAR(20) UNIQUE NOT NULL,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10,2) CHECK (precio > 0)
);
Rendimiento: Las operaciones de unión (JOIN) basadas en claves foráneas pueden afectar el rendimiento, especialmente en tablas grandes. Los índices adecuados son cruciales.
Ciclos de referencia: Evitar ciclos de referencia que puedan complicar las operaciones de inserción o eliminación de datos.
-- Potencial problema con ciclos de referencia
CREATE TABLE A (
id INT PRIMARY KEY,
b_id INT,
FOREIGN KEY (b_id) REFERENCES B(id)
);
CREATE TABLE B (
id INT PRIMARY KEY,
a_id INT,
FOREIGN KEY (a_id) REFERENCES A(id)
);
- Nomenclatura consistente: Adoptar convenciones de nomenclatura claras para las claves y restricciones mejora la mantenibilidad del esquema.
-- Convención de nomenclatura clara
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
cliente_id INT,
CONSTRAINT fk_pedidos_clientes FOREIGN KEY (cliente_id) REFERENCES clientes(cliente_id)
);
Las claves y referencias bien diseñadas son fundamentales para crear bases de datos relacionales robustas que mantengan la integridad de los datos y permitan consultas eficientes entre tablas relacionadas.
Diseño relacional
El diseño relacional es el proceso mediante el cual se estructura una base de datos para representar eficientemente la información y las relaciones entre entidades del mundo real. Un buen diseño relacional es fundamental para garantizar la integridad, flexibilidad y rendimiento de las aplicaciones que utilizan la base de datos.
Proceso de diseño relacional
El diseño de una base de datos relacional generalmente sigue un proceso estructurado que consta de varias etapas:
1. Análisis de requisitos: Identificar qué información necesita almacenar la base de datos y cómo será utilizada.
2. Diseño conceptual: Crear un modelo de alto nivel (generalmente un diagrama entidad-relación) que represente las entidades y sus relaciones.
3. Diseño lógico: Transformar el modelo conceptual en un modelo relacional compuesto por tablas, atributos y relaciones.
4. Normalización: Aplicar reglas formales para eliminar redundancias y anomalías.
5. Diseño físico: Implementar el modelo lógico en un sistema de gestión de bases de datos específico.
Modelado entidad-relación
El diagrama entidad-relación (ER) es una herramienta visual que ayuda a conceptualizar la estructura de la base de datos antes de implementarla:
Entidades: Representan objetos o conceptos del mundo real (por ejemplo, clientes, productos, pedidos).
Atributos: Propiedades que describen a las entidades (nombre, precio, fecha).
Relaciones: Conexiones lógicas entre entidades que reflejan cómo interactúan entre sí.
Un diagrama ER típico utiliza rectángulos para representar entidades, óvalos para atributos y rombos o líneas para relaciones, con símbolos que indican la cardinalidad (1:1, 1:N, N:M).
Normalización de bases de datos
La normalización es un proceso sistemático que elimina la redundancia y mejora la integridad de los datos mediante la descomposición de tablas grandes en tablas más pequeñas y mejor estructuradas. Las formas normales más comunes son:
- Primera Forma Normal (1NF): Elimina grupos repetitivos y garantiza que cada columna contenga valores atómicos (indivisibles).
-- Tabla NO normalizada (viola 1NF)
CREATE TABLE pedidos_no_normalizado (
pedido_id INT,
cliente VARCHAR(100),
productos VARCHAR(255) -- Contiene múltiples productos separados por comas
);
-- Tabla en 1NF
CREATE TABLE pedidos (
pedido_id INT,
cliente VARCHAR(100)
);
CREATE TABLE detalles_pedido (
pedido_id INT,
producto VARCHAR(100),
cantidad INT
);
- Segunda Forma Normal (2NF): Cumple 1NF y elimina dependencias parciales (cada atributo no clave debe depender de toda la clave primaria).
-- Tabla que viola 2NF
CREATE TABLE inscripciones_no_2nf (
estudiante_id INT,
curso_id INT,
nombre_estudiante VARCHAR(100), -- Depende solo de estudiante_id
nombre_curso VARCHAR(100), -- Depende solo de curso_id
calificacion DECIMAL(4,2),
PRIMARY KEY (estudiante_id, curso_id)
);
-- Tablas en 2NF
CREATE TABLE estudiantes (
estudiante_id INT PRIMARY KEY,
nombre_estudiante VARCHAR(100)
);
CREATE TABLE cursos (
curso_id INT PRIMARY KEY,
nombre_curso VARCHAR(100)
);
CREATE TABLE inscripciones (
estudiante_id INT,
curso_id INT,
calificacion DECIMAL(4,2),
PRIMARY KEY (estudiante_id, curso_id),
FOREIGN KEY (estudiante_id) REFERENCES estudiantes(estudiante_id),
FOREIGN KEY (curso_id) REFERENCES cursos(curso_id)
);
- Tercera Forma Normal (3NF): Cumple 2NF y elimina dependencias transitivas (atributos no clave no deben depender de otros atributos no clave).
-- Tabla que viola 3NF
CREATE TABLE empleados_no_3nf (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(100),
departamento_id INT,
nombre_departamento VARCHAR(50), -- Depende de departamento_id, no de empleado_id
ubicacion_departamento VARCHAR(50) -- Depende de departamento_id
);
-- Tablas en 3NF
CREATE TABLE departamentos (
departamento_id INT PRIMARY KEY,
nombre_departamento VARCHAR(50),
ubicacion VARCHAR(50)
);
CREATE TABLE empleados (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(100),
departamento_id INT,
FOREIGN KEY (departamento_id) REFERENCES departamentos(departamento_id)
);
Forma Normal Boyce-Codd (FNBC): Una versión más estricta de 3NF que aborda ciertos casos especiales de dependencias funcionales.
Cuarta Forma Normal (4NF) y Quinta Forma Normal (5NF): Tratan con dependencias multivaluadas y dependencias de join, respectivamente.
Desnormalización estratégica
Aunque la normalización es importante para la integridad de los datos, en algunos casos puede ser necesario desnormalizar estratégicamente para mejorar el rendimiento:
-- Tabla normalizada
CREATE TABLE productos (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100),
categoria_id INT,
FOREIGN KEY (categoria_id) REFERENCES categorias(categoria_id)
);
-- Tabla parcialmente desnormalizada para mejorar rendimiento de consultas frecuentes
CREATE TABLE productos_desnormalizado (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100),
categoria_id INT,
nombre_categoria VARCHAR(50), -- Redundante pero mejora rendimiento
FOREIGN KEY (categoria_id) REFERENCES categorias(categoria_id)
);
La desnormalización debe aplicarse con cautela, considerando:
- Frecuencia de consultas vs. actualizaciones
- Volumen de datos
- Requisitos de rendimiento específicos
- Mecanismos para mantener la consistencia de datos redundantes
Patrones de diseño relacional
Existen varios patrones comunes que ayudan a resolver problemas específicos de diseño:
- Patrón de tabla de catálogo: Utilizado para almacenar listas de valores predefinidos.
CREATE TABLE estados_pedido (
estado_id INT PRIMARY KEY,
nombre VARCHAR(50),
descripcion VARCHAR(255)
);
CREATE TABLE pedidos (
pedido_id INT PRIMARY KEY,
cliente_id INT,
estado_id INT,
FOREIGN KEY (estado_id) REFERENCES estados_pedido(estado_id)
);
- Patrón de tabla de historial: Mantiene un registro histórico de cambios.
CREATE TABLE productos (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100),
precio DECIMAL(10,2),
ultima_actualizacion TIMESTAMP
);
CREATE TABLE historial_precios (
historial_id INT PRIMARY KEY,
producto_id INT,
precio_anterior DECIMAL(10,2),
precio_nuevo DECIMAL(10,2),
fecha_cambio TIMESTAMP,
usuario VARCHAR(50),
FOREIGN KEY (producto_id) REFERENCES productos(producto_id)
);
- Patrón de tabla de intersección: Implementa relaciones muchos a muchos con atributos adicionales.
CREATE TABLE proyectos (
proyecto_id INT PRIMARY KEY,
nombre VARCHAR(100)
);
CREATE TABLE empleados (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(100)
);
CREATE TABLE asignaciones (
proyecto_id INT,
empleado_id INT,
fecha_inicio DATE,
rol VARCHAR(50),
horas_asignadas INT,
PRIMARY KEY (proyecto_id, empleado_id),
FOREIGN KEY (proyecto_id) REFERENCES proyectos(proyecto_id),
FOREIGN KEY (empleado_id) REFERENCES empleados(empleado_id)
);
- Patrón de árbol jerárquico: Representa estructuras jerárquicas como organigramas o categorías anidadas.
-- Patrón de adyacencia simple
CREATE TABLE categorias (
categoria_id INT PRIMARY KEY,
nombre VARCHAR(100),
categoria_padre_id INT,
FOREIGN KEY (categoria_padre_id) REFERENCES categorias(categoria_id)
);
-- Patrón de conjunto anidado (para consultas eficientes de jerarquías)
CREATE TABLE categorias_anidadas (
categoria_id INT PRIMARY KEY,
nombre VARCHAR(100),
izquierda INT,
derecha INT
);
Consideraciones prácticas de diseño
Al diseñar una base de datos relacional, es importante considerar:
Equilibrio entre normalización y rendimiento: Normalizar lo suficiente para mantener la integridad de datos, pero considerar la desnormalización estratégica donde sea necesario para el rendimiento.
Escalabilidad: Diseñar pensando en el crecimiento futuro de los datos y las necesidades cambiantes.
-- Diseño que facilita la partición horizontal futura
CREATE TABLE ventas (
venta_id INT,
fecha DATE,
cliente_id INT,
total DECIMAL(10,2),
-- Incluir una columna que facilite la partición
region_id INT,
PRIMARY KEY (venta_id)
);
- Integridad de datos: Utilizar restricciones adecuadas para garantizar la validez de los datos.
CREATE TABLE productos (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10,2) CHECK (precio > 0),
stock INT DEFAULT 0 CHECK (stock >= 0),
categoria_id INT NOT NULL,
FOREIGN KEY (categoria_id) REFERENCES categorias(categoria_id)
);
- Convenciones de nomenclatura: Adoptar convenciones coherentes para nombres de tablas, columnas y restricciones.
-- Convención consistente
CREATE TABLE tbl_clientes (
cli_id INT PRIMARY KEY,
cli_nombre VARCHAR(100),
cli_email VARCHAR(100)
);
CREATE TABLE tbl_pedidos (
ped_id INT PRIMARY KEY,
ped_fecha DATE,
cli_id INT,
CONSTRAINT fk_pedidos_clientes FOREIGN KEY (cli_id) REFERENCES tbl_clientes(cli_id)
);
- Documentación: Mantener documentación actualizada del esquema, incluyendo diagramas ER y descripciones de tablas y relaciones.
Herramientas de diseño relacional
Existen diversas herramientas que facilitan el diseño relacional:
- MySQL Workbench: Permite crear diagramas ER y generar código SQL para MySQL.
- pgModeler: Herramienta específica para modelado de bases de datos PostgreSQL.
- Lucidchart: Herramienta en línea para crear diagramas ER.
- DbSchema: Herramienta visual de diseño compatible con múltiples sistemas de bases de datos.
Estas herramientas permiten visualizar el diseño, validar relaciones y generar scripts SQL para implementar el esquema diseñado.
Un buen diseño relacional es la base de cualquier sistema de información eficiente. Aunque requiere tiempo y esfuerzo iniciales, evita problemas costosos de integridad de datos y rendimiento a largo plazo, además de facilitar el mantenimiento y la evolución de la base de datos a medida que cambian los requisitos del negocio.
Otras lecciones de SQL
Accede a todas las lecciones de SQL y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Sql
Introducción Y Entorno
Ddl Y Dml
Introducción Y Entorno
Instalación De Mysql
Introducción Y Entorno
Instalación De Postgresql
Introducción Y Entorno
Tipos De Datos
Introducción Y Entorno
Bases De Datos Y Tablas
Introducción Y Entorno
Sistemas De Gestión De Bases De Datos
Introducción Y Entorno
Tipos De Bases De Datos
Introducción Y Entorno
Creación De Bases De Datos Y Tablas: Create Database, Create Table
Sintaxis Dml Crud
Consultas Básicas De Selección: Select Y Where
Sintaxis Dml Crud
Inserción De Datos: Insert Into
Sintaxis Dml Crud
Actualización De Datos: Update
Sintaxis Dml Crud
Eliminación De Datos: Delete
Sintaxis Dml Crud
Introducción A Dml
Sintaxis Dml Crud
Consultar Datos: Select
Sintaxis Dml Crud
Clasificación De Resultados Con Order By
Filtros Y Clasificación
Filtrado De Valores Únicos Con Distinct
Filtros Y Clasificación
Paginación Con Limit Y Offset
Filtros Y Clasificación
Alterar La Estructura De Tablas Existentes: Alter Table
Sintaxis Ddl
Renombrar Tablas Y Bases De Datos: Rename
Sintaxis Ddl
Vaciar Tablas Y Bases De Datos: Drop
Sintaxis Ddl
Uso De Funciones Agregadas: Count, Sum, Avg, Max, Min
Funciones Y Agrupación
Agrupación De Resultados Con Group By
Funciones Y Agrupación
Filtrado De Grupos De Resultados Con Having
Funciones Y Agrupación
Funciones Numéricas Y Matemáticas
Funciones Y Agrupación
Funciones De Fecha Y Hora
Funciones Y Agrupación
Funciones De Texto
Funciones Y Agrupación
Many To One
Asociaciones Entre Tablas
One To Many
Asociaciones Entre Tablas
One To One
Asociaciones Entre Tablas
Many To Many
Asociaciones Entre Tablas
Relaciones Entre Tablas
Joins Y Subqueries
Uso De Inner Join, Left Join, Right Join, Full Join
Joins Y Subqueries
Creación Y Uso De Subqueries
Joins Y Subqueries
Left Join Y Right Join
Joins Y Subqueries
Full Join
Joins Y Subqueries
Cross Join Y Self Join
Joins Y Subqueries
Optimización De Consultas
Sintaxis Avanzada
Uso De Índices Y Particiones
Sintaxis Avanzada
Uso De Vistas
Sintaxis Avanzada
Triggers Y Eventos
Sintaxis Avanzada
Particiones
Sintaxis Avanzada
Restricciones E Integridad
Sintaxis Avanzada
Transacciones
Sintaxis Avanzada
Vistas Materializadas
Sintaxis Avanzada
Rollback
Sintaxis Avanzada
Vistas Con Create View
Sintaxis Avanzada
Principios Acid
Sintaxis Avanzada
Manejo De Errores Y Excepciones
Sintaxis Avanzada
Funciones Ventana
Sintaxis Avanzada
Índices
Sintaxis Avanzada
Expresiones De Tabla Comunes (Cte) Con With
Sintaxis Avanzada
Creación Y Uso De Funciones
Programación En Sql
Creación Y Uso De Procedimientos Almacenados
Programación En Sql
Variables Y Control De Flujo
Programación En Sql
Creación Y Manejo De Usuarios Y Roles
Seguridad Y Administración
Asignación Y Gestión De Permisos
Seguridad Y Administración
Copias De Seguridad Y Restauración De Bases De Datos
Seguridad Y Administración
Ejercicios de programación de SQL
Evalúa tus conocimientos de esta lección Relaciones entre tablas con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Tipos de datos
Inserción de datos: INSERT INTO
Filtrado de grupos de resultados con HAVING
Uso de índices y particiones
Renombrar tablas y bases de datos: RENAME
Uso de vistas
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Agrupación de resultados con GROUP BY
Creación y uso de subqueries
Sentencias INSERT
Copias de seguridad y restauración de bases de datos
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Instalación de MySQL
Relaciones entre tablas
Eliminación de datos: DELETE
Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE
Creación y uso de funciones
Creación de tablas e inserción de datos con SQL
Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN
Optimización de consultas
Introducción a SQL
Triggers y eventos
Clasificación de resultados con ORDER BY
Alterar la estructura de tablas existentes: ALTER TABLE
Eliminación de datos: DELETE
Instalación de PostgreSQL
Creación y uso de procedimientos almacenados
Consultas básicas de selección: SELECT y WHERE
Vaciar tablas y bases de datos: DROP
Actualización de datos: UPDATE
Creación y manejo de usuarios y roles
Consultas básicas de selección SELECT y WHERE
Creación de bases de datos y tablas
Bases de datos y tablas
Actualización de datos: UPDATE
Relaciones entre tablas
Filtrado de valores únicos con DISTINCT
Asignación y gestión de permisos
En esta lección
Objetivos de aprendizaje de esta lección
- Comprender los diferentes tipos de relaciones entre tablas según cardinalidad y dependencia.
- Identificar y aplicar correctamente las claves primarias, candidatas, alternativas y foráneas.
- Entender y utilizar las restricciones de integridad referencial para mantener la consistencia de los datos.
- Aplicar principios de diseño relacional y normalización para estructurar bases de datos eficientes y coherentes.
- Reconocer patrones comunes de diseño y considerar aspectos prácticos para optimizar rendimiento y mantenimiento.