El Modelo Relacional
Fundamentos, Diseño, Normalización, SQL y Sistemas de Gestión de Bases de Datos
📊 Resumen Ejecutivo
El modelo relacional, propuesto por Edgar F. Codd en 1970, revolucionó la gestión de bases de datos al introducir una fundamentación matemática sólida basada en la teoría de conjuntos y la lógica de predicados. Este modelo representa la información mediante tablas (relaciones) y proporciona mecanismos formales para su manipulación a través del álgebra y cálculo relacional. Su implementación práctica a través del lenguaje SQL lo ha convertido en el estándar dominante para sistemas de gestión de información estructurada, siendo utilizado tanto en sistemas comerciales de alto rendimiento como en soluciones de código abierto que impulsan desde aplicaciones web hasta sistemas empresariales críticos.
1. Definiciones y Conceptos Básicos del Modelo Relacional
1.1. Origen y Fundamentación Teórica
El modelo relacional fue introducido por Edgar Frank Codd en su artículo seminal «A Relational Model of Data for Large Shared Data Banks» publicado en 1970. Codd, trabajando en IBM Research, buscaba superar las limitaciones de los modelos jerárquicos y de red que dominaban la época, caracterizados por su complejidad y dependencia de la estructura física de almacenamiento. El modelo relacional establece una clara separación entre el nivel lógico y físico de los datos, permitiendo que los usuarios y aplicaciones trabajen con una visión abstracta de la información sin preocuparse por los detalles de implementación.
La fundamentación matemática del modelo se basa en la teoría de conjuntos y el álgebra relacional. Una base de datos relacional se compone de relaciones (tablas), donde cada relación es un conjunto de tuplas (filas) que comparten la misma estructura definida por atributos (columnas). Esta base formal garantiza propiedades importantes como la clausura algebraica: el resultado de cualquier operación sobre relaciones es también una relación, lo que permite componer operaciones complejas a partir de operaciones básicas.
1.2. Conceptos Fundamentales
Dominio
Un dominio es un conjunto de valores atómicos permitidos para un atributo. Por ejemplo, el dominio de un atributo «edad» podría ser el conjunto de números enteros entre cero y ciento cincuenta. Los dominios definen el tipo de datos y las restricciones de valores que puede tomar cada atributo, asegurando la integridad semántica de la información.
Relación
Una relación R sobre los dominios D1, D2, …, Dn es un subconjunto del producto cartesiano D1 × D2 × … × Dn. En términos prácticos, una relación es una tabla con n columnas donde cada fila representa una combinación válida de valores de los dominios correspondientes. El grado o aridad de una relación es el número de atributos que posee, mientras que la cardinalidad es el número de tuplas que contiene.
Tupla
Una tupla es un elemento de una relación, representando una fila en la tabla. Cada tupla es una combinación ordenada de valores, uno para cada atributo de la relación. Las tuplas deben ser únicas dentro de una relación, lo que se garantiza mediante la existencia de claves.
Atributo
Un atributo representa una propiedad o característica de las entidades modeladas por la relación. Cada atributo tiene un nombre único dentro de su relación y está asociado a un dominio específico. Los atributos pueden clasificarse en simples o compuestos, monovaluados o multivaluados, y almacenados o derivados.
💡 Diferencia entre Modelo Teórico y Práctica
Es importante distinguir entre el modelo relacional teórico y su implementación práctica en los SGBD. Mientras que en teoría las tuplas son conjuntos no ordenados y no pueden existir duplicados, los SGBD reales permiten tablas con filas duplicadas (multiconjuntos o bags) y mantienen un orden físico de almacenamiento. La cláusula DISTINCT en SQL se utiliza para eliminar duplicados cuando se desea comportamiento de conjunto puro.
1.3. Tipos de Claves
Superclave
Una superclave es cualquier conjunto de atributos que puede identificar únicamente cada tupla de una relación. Formalmente, si K es una superclave de R, entonces no pueden existir dos tuplas distintas t1 y t2 en R que tengan el mismo valor para todos los atributos de K.
Clave Candidata
Una clave candidata es una superclave minimal, es decir, una superclave de la cual no se puede eliminar ningún atributo sin perder la propiedad de unicidad. Una relación puede tener múltiples claves candidatas, todas ellas funcionalmente equivalentes para propósitos de identificación.
Clave Primaria (Primary Key)
La clave primaria es la clave candidata seleccionada por el diseñador de la base de datos para ser el identificador principal de las tuplas. Por convención, se elige la clave más natural o la que tiene menos atributos. La clave primaria no puede contener valores nulos (restricción de integridad de entidad).
Clave Foránea (Foreign Key)
Una clave foránea es un conjunto de atributos en una relación R1 que hace referencia a la clave primaria de otra relación R2. Las claves foráneas implementan las relaciones entre tablas y están sujetas a la restricción de integridad referencial: el valor de una clave foránea debe aparecer como valor de clave primaria en la tabla referenciada, o ser nulo.
| Tipo de Clave | Definición | Características | Ejemplo |
|---|---|---|---|
| Superclave | Conjunto de atributos que identifica únicamente tuplas | Puede contener atributos redundantes | {DNI, Nombre, Apellidos} |
| Clave Candidata | Superclave minimal | Sin redundancia, puede haber varias | {DNI} o {NumSeguridadSocial} |
| Clave Primaria | Clave candidata elegida como principal | No admite nulos, única por tabla | {DNI} |
| Clave Foránea | Referencias a clave primaria de otra tabla | Implementa relaciones, puede admitir nulos | PEDIDO(cliente_dni) → CLIENTE(dni) |
| Clave Alternativa | Clave candidata no seleccionada como primaria | Índice único recomendado | {NumSeguridadSocial} |
1.4. Las 12 Reglas de Codd
Edgar F. Codd propuso doce reglas (más una regla cero) que debe cumplir un sistema para considerarse verdaderamente relacional. Estas reglas establecen criterios estrictos que muchos SGBD comerciales no cumplen completamente:
- Regla 0 – Regla Fundamental: Un sistema que se anuncia como relacional debe gestionar bases de datos exclusivamente mediante capacidades relacionales.
- Regla 1 – Regla de la Información: Toda la información debe representarse de una sola manera: mediante valores en posiciones de columnas dentro de filas de tablas.
- Regla 2 – Regla del Acceso Garantizado: Cada valor debe ser accesible mediante la combinación de nombre de tabla, valor de clave primaria y nombre de columna.
- Regla 3 – Tratamiento Sistemático de Valores Nulos: Los valores nulos deben ser soportados de forma uniforme y distinta de cualquier valor del dominio.
- Regla 4 – Catálogo Dinámico en Línea Basado en el Modelo Relacional: Los metadatos deben almacenarse como tablas ordinarias consultables mediante el mismo lenguaje de datos.
- Regla 5 – Regla del Sublenguaje de Datos Completo: Debe existir al menos un lenguaje que soporte definición de datos, manipulación, restricciones de integridad, autorización y transacciones.
- Regla 6 – Regla de Actualización de Vistas: Todas las vistas teóricamente actualizables deben ser actualizables por el sistema.
- Regla 7 – Insert, Update y Delete de Alto Nivel: Las operaciones deben poder aplicarse a conjuntos completos, no solo a filas individuales.
- Regla 8 – Independencia Física de Datos: Los cambios en el almacenamiento físico no deben afectar a las aplicaciones.
- Regla 9 – Independencia Lógica de Datos: Los cambios en las tablas base no deben afectar a las aplicaciones si son compatibles.
- Regla 10 – Independencia de Integridad: Las restricciones de integridad deben especificarse separadamente de los programas de aplicación.
- Regla 11 – Independencia de Distribución: La distribución física no debe afectar al funcionamiento lógico.
- Regla 12 – Regla de No Subversión: No debe ser posible usar un lenguaje de bajo nivel para saltarse las restricciones de integridad.
⚡ Realidad Práctica de las Reglas de Codd
Aunque estas reglas establecen un ideal teórico, ningún SGBD comercial las cumple todas completamente. Por ejemplo, la actualización de vistas complejas sigue siendo problemática en todos los sistemas, y muchos SGBD ofrecen extensiones no relacionales (como tipos de datos especializados o procedimientos almacenados) que violan la regla cero. Sin embargo, estas reglas siguen siendo un referente importante para evaluar la pureza relacional de un sistema.
2. Arquitectura del Modelo Relacional
2.1. Arquitectura de Tres Esquemas ANSI-SPARC
El modelo relacional se implementa típicamente siguiendo la arquitectura de tres esquemas propuesta por ANSI-SPARC, que establece tres niveles de abstracción claramente diferenciados para proporcionar independencia de datos. Esta arquitectura, aunque fue diseñada para sistemas de bases de datos en general, se aplica perfectamente al modelo relacional.
Nivel Externo (Vistas de Usuario)
El nivel externo define múltiples vistas personalizadas de la base de datos para diferentes usuarios o grupos de usuarios. Cada vista externa presenta una perspectiva específica de los datos, ocultando información irrelevante o sensible para ese usuario particular. En el modelo relacional, las vistas se implementan como consultas almacenadas que derivan tablas virtuales a partir de las tablas base. Por ejemplo, un departamento de recursos humanos podría tener una vista que muestre información de empleados sin incluir datos salariales sensibles.
Nivel Conceptual (Esquema Lógico)
El nivel conceptual representa la estructura lógica completa de la base de datos independientemente de consideraciones físicas. En el modelo relacional, este nivel se define mediante el esquema de la base de datos: el conjunto de todas las relaciones con sus atributos, dominios, claves y restricciones de integridad. Este es el nivel donde los diseñadores de bases de datos trabajan para modelar la realidad del dominio de aplicación. El esquema conceptual describe qué datos se almacenan y qué relaciones existen entre ellos, pero no cómo se almacenan físicamente.
Nivel Interno (Esquema Físico)
El nivel interno describe la implementación física de la base de datos: cómo se almacenan realmente los datos en el hardware. Esto incluye estructuras de almacenamiento, índices, organización de archivos, compresión, particionamiento y distribución física de los datos. El SGBD oculta estos detalles al usuario, proporcionando independencia física de datos. Cambios en el nivel interno, como añadir un índice para mejorar el rendimiento, no deberían afectar al nivel conceptual o externo.
2.2. Componentes Arquitectónicos de un SGBD Relacional
Procesador de Consultas
El procesador de consultas es responsable de transformar las consultas SQL de alto nivel en operaciones de bajo nivel eficientes sobre la base de datos física. Sus componentes principales incluyen el analizador sintáctico que verifica la corrección de la sintaxis SQL, el traductor que convierte SQL a álgebra relacional, el optimizador que genera planes de ejecución eficientes explorando alternativas, y el evaluador que ejecuta el plan seleccionado.
Gestor de Almacenamiento
El gestor de almacenamiento proporciona la interfaz entre los datos de bajo nivel almacenados en la base de datos y los programas de aplicación y consultas. Sus responsabilidades incluyen la interacción con el gestor de archivos del sistema operativo, la gestión de buffers en memoria, la implementación de estructuras de indexación y el mantenimiento del diccionario de datos que contiene los metadatos del sistema.
Gestor de Transacciones
El gestor de transacciones garantiza que las transacciones se ejecuten correctamente preservando las propiedades ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad). Coordina el control de concurrencia para gestionar accesos simultáneos, implementa mecanismos de recuperación ante fallos, y asegura que las transacciones se completen totalmente o no tengan ningún efecto sobre la base de datos.
💡 Optimización de Consultas
El optimizador de consultas es uno de los componentes más sofisticados de un SGBD relacional moderno. Utiliza estadísticas sobre los datos (cardinalidad de tablas, distribución de valores, selectividad de predicados) y modelos de costos para estimar el tiempo de ejecución de diferentes planes de consulta. Los optimizadores modernos consideran factores como uso de índices, orden de joins, paralelización y distribución de datos en sistemas distribuidos.
3. Diseño de Bases de Datos Relacionales
3.1. Proceso de Diseño
El diseño de una base de datos relacional es un proceso sistemático que transforma los requisitos de información de una organización en una estructura de base de datos eficiente y bien organizada. Este proceso se desarrolla en varias fases interrelacionadas, cada una con objetivos específicos y productos de salida bien definidos.
Fase 1: Análisis de Requisitos
Durante esta fase inicial se recopilan y documentan los requisitos de información del sistema. Se identifican los datos que deben almacenarse, las relaciones entre ellos, las restricciones de negocio, los volúmenes esperados de datos, los patrones de acceso y los requisitos de rendimiento. Esta fase produce un documento de especificación de requisitos que sirve como base para las siguientes etapas. Las técnicas utilizadas incluyen entrevistas con usuarios, análisis de documentos existentes, observación de procesos de negocio y talleres de trabajo con stakeholders.
Fase 2: Diseño Conceptual
El diseño conceptual crea un modelo de alto nivel de la estructura de la base de datos independiente de cualquier SGBD específico. El modelo Entidad-Relación es la herramienta más común para esta fase. Se identifican las entidades (objetos o conceptos del mundo real), los atributos que describen cada entidad, y las relaciones entre entidades con sus cardinalidades. El resultado es un diagrama ER que representa visualmente la estructura conceptual de la información, libre de consideraciones de implementación.
Fase 3: Diseño Lógico
En el diseño lógico, el modelo conceptual se transforma en un esquema relacional específico. Se aplican reglas de transformación para convertir entidades y relaciones en tablas, se definen claves primarias y foráneas, se especifican dominios de atributos, y se documentan restricciones de integridad. Un aspecto crucial es el proceso de normalización, que se aplica para eliminar redundancias y anomalías de actualización. El producto final es un conjunto de esquemas de relaciones con sus restricciones.
Fase 4: Diseño Físico
El diseño físico traduce el esquema lógico en estructuras de almacenamiento específicas del SGBD objetivo. Se toman decisiones sobre indexación (qué columnas indexar, tipos de índices), particionamiento de tablas, organización de archivos, espacios de almacenamiento y parámetros de configuración. También se pueden aplicar técnicas de desnormalización controlada para optimizar patrones de consulta específicos cuando el rendimiento es crítico. Esta fase requiere conocimiento profundo del SGBD específico y sus características de rendimiento.
3.2. Restricciones de Integridad
Las restricciones de integridad son reglas que deben cumplirse en todo momento para mantener la exactitud y consistencia de los datos. El modelo relacional define varios tipos de restricciones formales que los SGBD modernos implementan y verifican automáticamente.
Integridad de Entidad
Esta restricción establece que la clave primaria de una relación no puede contener valores nulos. La razón fundamental es que la clave primaria identifica únicamente cada tupla, y un valor nulo representaría una tupla no identificable. Adicionalmente, implica que no pueden existir dos tuplas con el mismo valor de clave primaria (unicidad). Los SGBD imponen esta restricción automáticamente cuando se declara una clave primaria.
Integridad Referencial
La integridad referencial garantiza que las referencias entre tablas sean válidas. Cuando un atributo de una tabla (clave foránea) hace referencia a la clave primaria de otra tabla, el valor de la clave foránea debe existir en la tabla referenciada o ser nulo. Esta restricción previene «referencias colgantes» que apuntarían a tuplas inexistentes. Los SGBD modernos permiten definir acciones en cascada: cuando se elimina o actualiza una tupla referenciada, se puede propagar automáticamente el cambio, rechazar la operación, o establecer valores nulos en las referencias.
Integridad de Dominio
La integridad de dominio especifica que los valores de cada atributo deben pertenecer a su dominio definido. Esto incluye el tipo de datos (entero, cadena, fecha), restricciones de rango (edad entre cero y ciento cincuenta), restricciones de formato (código postal con formato específico), y valores por defecto. Los SGBD implementan estas restricciones mediante tipos de datos, constraints CHECK, y triggers cuando se necesita lógica más compleja.
Restricciones de Usuario (Semánticas)
Además de las restricciones inherentes al modelo relacional, se pueden definir restricciones específicas del dominio de aplicación. Por ejemplo, que el salario de un empleado no puede exceder el salario de su supervisor, que la fecha de finalización de un proyecto debe ser posterior a su fecha de inicio, o que un estudiante no puede matricularse en más de cinco asignaturas simultáneamente. Estas restricciones se implementan mediante constraints CHECK complejos, assertions, o triggers que ejecutan lógica procedural para verificar las condiciones.
⚠️ Coste de las Restricciones de Integridad
Aunque las restricciones de integridad son esenciales para mantener la calidad de los datos, tienen un impacto en el rendimiento. Cada inserción, actualización o eliminación debe verificar las restricciones aplicables, lo que implica consultas adicionales a la base de datos. En sistemas con requisitos de rendimiento extremos, a veces se relajan ciertas restricciones y se verifica la integridad a nivel de aplicación, aunque esto aumenta significativamente la complejidad y el riesgo de inconsistencias.
4. Normalización
4.1. Fundamentos y Objetivos de la Normalización
La normalización es un proceso sistemático de organización de datos que elimina redundancias y previene anomalías de actualización, mediante la descomposición de relaciones en relaciones más pequeñas que cumplen ciertas propiedades deseables. Este proceso, formalizado por Edgar F. Codd y posteriormente refinado por otros investigadores, se basa en la teoría de dependencias funcionales y multivaluadas.
Los objetivos principales de la normalización son prevenir anomalías de inserción (imposibilidad de añadir ciertos datos sin añadir otros datos no relacionados), anomalías de eliminación (pérdida involuntaria de información al eliminar datos), y anomalías de actualización (necesidad de modificar múltiples tuplas para actualizar un único hecho). La normalización también minimiza el espacio de almacenamiento necesario al reducir redundancias y simplifica las reglas de integridad al aislar datos relacionados en sus propias relaciones.
4.2. Dependencias Funcionales
Una dependencia funcional es una restricción entre dos conjuntos de atributos de una relación. Se dice que un conjunto de atributos Y depende funcionalmente de un conjunto de atributos X (notado X → Y) si para cada valor de X existe exactamente un valor de Y asociado. Formalmente, si dos tuplas tienen el mismo valor para X, deben tener el mismo valor para Y.
Por ejemplo, en una relación de empleados, DNI → Nombre significa que cada DNI determina únicamente un nombre. Las dependencias funcionales pueden ser triviales (Y es subconjunto de X), no triviales parciales (Y depende de una parte de X), o completas (Y depende de todo X). La identificación correcta de dependencias funcionales es fundamental para aplicar adecuadamente el proceso de normalización.
4.3. Formas Normales
Primera Forma Normal (1FN)
Una relación está en primera forma normal si todos sus atributos contienen únicamente valores atómicos, es decir, indivisibles. No se permiten atributos multivaluados, compuestos o relaciones anidadas. Por ejemplo, una tabla donde el atributo «teléfonos» contiene múltiples números separados por comas violaría 1FN. La solución es crear una tabla separada para teléfonos con una clave foránea que referencie la entidad principal, permitiendo múltiples filas de teléfonos por entidad.
Ejemplo de transformación a 1FN:
No está en 1FN:
EMPLEADO(id, nombre, telefonos)
Donde telefonos = «666111222, 666333444»
Está en 1FN:
EMPLEADO(id, nombre)
TELEFONO(empleado_id, numero)
Segunda Forma Normal (2FN)
Una relación está en segunda forma normal si está en 1FN y además todos los atributos no clave dependen completamente de la clave primaria completa, no solo de parte de ella. Esta forma normal es relevante solo para relaciones con claves compuestas. Una dependencia funcional parcial ocurre cuando un atributo depende solo de algunos componentes de una clave compuesta. La solución es descomponer la relación, separando los atributos que dependen solo de parte de la clave.
Ejemplo de transformación a 2FN:
No está en 2FN:
PEDIDO_DETALLE(pedido_id, producto_id, cantidad, nombre_producto, precio)
Donde nombre_producto y precio dependen solo de producto_id
Está en 2FN:
PEDIDO_DETALLE(pedido_id, producto_id, cantidad)
PRODUCTO(producto_id, nombre_producto, precio)
Tercera Forma Normal (3FN)
Una relación está en tercera forma normal si está en 2FN y además no existen dependencias transitivas entre atributos no clave. Una dependencia transitiva ocurre cuando un atributo no clave depende de otro atributo no clave, que a su vez depende de la clave primaria. Es decir, si X → Y y Y → Z, entonces Z depende transitivamente de X. La eliminación de dependencias transitivas previene anomalías al aislar hechos independientes en sus propias relaciones.
Ejemplo de transformación a 3FN:
No está en 3FN:
EMPLEADO(id, nombre, departamento_id, departamento_nombre, departamento_ubicacion)
Donde departamento_nombre y ubicacion dependen de departamento_id
Está en 3FN:
EMPLEADO(id, nombre, departamento_id)
DEPARTAMENTO(departamento_id, nombre, ubicacion)
Forma Normal de Boyce-Codd (BCNF)
La forma normal de Boyce-Codd es una versión más estricta de 3FN. Una relación está en BCNF si para cada dependencia funcional no trivial X → Y, X es una superclave. En otras palabras, solo las superclaves pueden determinar otros atributos. Hay casos raros donde una relación está en 3FN pero no en BCNF, típicamente cuando la relación tiene múltiples claves candidatas compuestas que se solapan. BCNF elimina todas las anomalías derivadas de dependencias funcionales, aunque puede requerir descomposiciones que no preserven todas las dependencias.
Cuarta Forma Normal (4FN)
La cuarta forma normal trata dependencias multivaluadas, que ocurren cuando la presencia de un valor de un atributo determina un conjunto de valores de otro atributo, independientemente de otros atributos. Una relación está en 4FN si está en BCNF y no contiene dependencias multivaluadas no triviales. Por ejemplo, si un profesor puede enseñar múltiples asignaturas y tener múltiples títulos, y estas son independientes entre sí, se crea una dependencia multivaluada que genera redundancia. La solución es separar las dependencias multivaluadas en relaciones distintas.
Quinta Forma Normal (5FN)
La quinta forma normal, también llamada Forma Normal de Proyección-Join (PJNF), trata dependencias de join. Una relación está en 5FN si no se puede descomponer sin pérdida en relaciones más pequeñas. Es la forma normal más restrictiva y raramente se alcanza en bases de datos prácticas. Está relacionada con situaciones donde la información solo puede representarse completamente mediante la join de tres o más relaciones, y cualquier combinación de solo dos de ellas pierde información o introduce redundancia.
| Forma Normal | Requisito Clave | Elimina | Aplicación Práctica |
|---|---|---|---|
| 1FN | Valores atómicos | Atributos multivaluados y compuestos | Universal – siempre debe aplicarse |
| 2FN | Dependencia completa de la clave | Dependencias funcionales parciales | Importante para claves compuestas |
| 3FN | Sin dependencias transitivas | Dependencias entre no-claves | Objetivo estándar en la mayoría de diseños |
| BCNF | Solo superclaves determinan atributos | Todas las anomalías de DF | Deseable pero no siempre alcanzable sin pérdidas |
| 4FN | Sin dependencias multivaluadas | Redundancia por dependencias MV | Casos específicos con múltiples conjuntos independientes |
| 5FN | Sin dependencias de join | Redundancia residual de joins complejos | Raramente necesaria en práctica |
4.4. Desnormalización
Aunque la normalización es generalmente deseable, en ocasiones se aplica desnormalización deliberada para optimizar el rendimiento. La desnormalización introduce redundancia controlada para reducir el número de joins necesarios en consultas frecuentes o críticas. Por ejemplo, en un sistema de comercio electrónico, podría almacenarse el nombre del producto tanto en la tabla de productos como en la tabla de detalles de pedido, para evitar joins al listar pedidos históricos. La desnormalización debe documentarse cuidadosamente y acompañarse de mecanismos (como triggers) para mantener la consistencia de los datos duplicados.
✅ Mejores Prácticas de Normalización
- Normalizar hasta 3FN como objetivo por defecto en diseños transaccionales (OLTP)
- Considerar BCNF cuando sea posible sin pérdida de dependencias
- Documentar exhaustivamente cualquier decisión de desnormalización con su justificación
- Usar vistas materializadas en lugar de desnormalización cuando el SGBD lo soporte
- En sistemas analíticos (OLAP), la desnormalización mediante esquemas estrella o copo de nieve es práctica estándar
- Siempre proteger datos desnormalizados con triggers o lógica de aplicación para mantener consistencia
5. Álgebra y Cálculo Relacional
5.1. Álgebra Relacional
El álgebra relacional es un lenguaje procedimental que consiste en un conjunto de operaciones que toman una o dos relaciones como entrada y producen una nueva relación como resultado. Esta propiedad de clausura (el resultado de una operación es del mismo tipo que los operandos) permite componer operaciones complejas a partir de operaciones básicas. El álgebra relacional proporciona la fundamentación formal para los lenguajes de consulta y es utilizada internamente por los optimizadores de consultas para representar y transformar consultas.
Operaciones Básicas
Selección (σ): La operación de selección extrae tuplas de una relación que satisfacen un predicado dado. Se denota σpredicado(R). Por ejemplo, σedad>30(EMPLEADO) devuelve todos los empleados mayores de treinta años. La selección es conmutativa: σp1(σp2(R)) = σp2(σp1(R)) = σp1∧p2(R).
Proyección (π): La proyección extrae ciertas columnas de una relación, eliminando las demás y eliminando tuplas duplicadas. Se denota πatributos(R). Por ejemplo, πnombre,departamento(EMPLEADO) devuelve solo los nombres y departamentos de los empleados. La proyección puede reducir la cardinalidad de la relación al eliminar duplicados.
Unión (∪): La unión combina tuplas de dos relaciones eliminando duplicados. Las relaciones deben ser unión-compatibles (mismo número de atributos con dominios correspondientes compatibles). R ∪ S contiene todas las tuplas que están en R, en S, o en ambas. Es conmutativa y asociativa.
Diferencia (−): La diferencia R − S devuelve tuplas que están en R pero no en S. Las relaciones deben ser unión-compatibles. La diferencia no es conmutativa: R − S ≠ S − R.
Producto Cartesiano (×): El producto cartesiano R × S combina cada tupla de R con cada tupla de S. Si R tiene n tuplas y m atributos, y S tiene p tuplas y q atributos, el resultado tiene n×p tuplas y m+q atributos. El producto cartesiano es conmutativo.
Renombrado (ρ): La operación de renombrado cambia el nombre de una relación o sus atributos. Se denota ρX(R) para renombrar la relación, o ρ(A1,A2,…,An)(R) para renombrar atributos. Es útil para resolver ambigüedades y permitir auto-joins.
Operaciones Derivadas
Intersección (∩): R ∩ S = R − (R − S). Devuelve tuplas presentes en ambas relaciones. Es conmutativa y asociativa.
Join Natural (⋈): R ⋈ S combina tuplas de R y S que tienen valores iguales en todos los atributos comunes, eliminando columnas duplicadas. Equivale a πatributos(σR.A=S.A∧…(R × S)).
Theta Join (⋈θ): R ⋈θ S = σθ(R × S), donde θ es una condición arbitraria. Es un producto cartesiano seguido de una selección.
Equijoin: Un theta join donde la condición solo contiene igualdades. Es la base del join natural.
Join Externo (Outer Join): Preserva tuplas que no tienen correspondencia en la otra relación, rellenando con valores nulos. Puede ser left outer join (⟕), right outer join (⟖), o full outer join (⟗).
División (÷): R(X,Y) ÷ S(Y) devuelve todas las X de R que están asociadas con todas las Y de S. Es útil para consultas del tipo «encontrar todos los X que están relacionados con todos los Y». Por ejemplo, «estudiantes matriculados en todas las asignaturas».
| Operación | Símbolo | Descripción | Ejemplo en SQL |
|---|---|---|---|
| Selección | σ | Filtra filas según predicado | WHERE edad > 30 |
| Proyección | π | Selecciona columnas específicas | SELECT nombre, apellido |
| Unión | ∪ | Combina tuplas de dos relaciones | UNION |
| Diferencia | − | Tuplas en R pero no en S | EXCEPT / MINUS |
| Producto Cartesiano | × | Todas las combinaciones de R y S | FROM R, S (sin condición) |
| Join Natural | ⋈ | Join por atributos comunes | NATURAL JOIN |
| Theta Join | ⋈θ | Join con condición arbitraria | JOIN … ON condición |
| División | ÷ | «Para todo» en consultas | NOT EXISTS (subconsulta compleja) |
5.2. Cálculo Relacional
El cálculo relacional es un lenguaje declarativo basado en la lógica de predicados de primer orden. A diferencia del álgebra relacional que especifica cómo obtener el resultado, el cálculo relacional especifica qué tuplas deben estar en el resultado sin indicar cómo obtenerlas. Existen dos variantes: el cálculo relacional de tuplas y el cálculo relacional de dominios.
Cálculo Relacional de Tuplas
En el cálculo relacional de tuplas, las variables representan tuplas completas. Una consulta tiene la forma {t | P(t)} donde t es una variable de tupla y P(t) es una fórmula lógica que especifica las condiciones que debe cumplir t. Por ejemplo, para encontrar empleados con salario mayor a cincuenta mil: {e | EMPLEADO(e) ∧ e.salario > 50000}. Las fórmulas pueden incluir cuantificadores existenciales (∃) y universales (∀), conectivos lógicos (∧, ∨, ¬), y operadores de comparación.
Cálculo Relacional de Dominios
En el cálculo relacional de dominios, las variables representan valores de dominios individuales en lugar de tuplas completas. Una consulta especifica qué valores deben tener ciertos atributos. Por ejemplo: {n, s | ∃d(EMPLEADO(n, d, s) ∧ s > 50000)} devuelve nombres y salarios de empleados con salario mayor a cincuenta mil, donde n representa nombre, s representa salario, y d representa departamento.
Equivalencia y Poder Expresivo
El álgebra relacional y el cálculo relacional son equivalentes en poder expresivo: cualquier consulta expresable en álgebra relacional puede expresarse en cálculo relacional y viceversa. Esta equivalencia fue demostrada por Codd y es fundamental porque establece que SQL, basado en el cálculo relacional de tuplas, tiene el mismo poder expresivo que el álgebra relacional. El teorema de Codd establece que un lenguaje de consulta es «relacionalmente completo» si puede expresar todas las consultas expresables en álgebra relacional básica.
💡 Seguridad de las Expresiones
No todas las expresiones en cálculo relacional son válidas. Una expresión es «segura» si garantiza devolver un conjunto finito de tuplas. Por ejemplo, {t | ¬EMPLEADO(t)} sería insegura porque incluiría infinitas tuplas que no son empleados. Los lenguajes prácticos como SQL evitan este problema limitando las expresiones a formas seguras y usando un dominio de discurso finito (solo los valores presentes en la base de datos).
6. Modelo Entidad-Relación (ER)
6.1. Fundamentos del Modelo ER
El modelo Entidad-Relación, propuesto por Peter Chen en 1976, es una técnica de modelado conceptual de alto nivel para el diseño de bases de datos. Proporciona una representación gráfica intuitiva de la estructura de información de un dominio de aplicación, independiente de consideraciones de implementación. El modelo ER se centra en identificar los objetos importantes del mundo real (entidades), sus propiedades (atributos), y cómo se relacionan entre sí (relaciones).
6.2. Componentes del Modelo ER
Entidades
Una entidad es un objeto distinguible del mundo real con existencia independiente, ya sea física (una persona, un producto) o conceptual (un curso, una transacción). El conjunto de todas las entidades del mismo tipo forma un tipo de entidad o conjunto de entidades. En los diagramas ER, las entidades se representan mediante rectángulos. Por ejemplo, EMPLEADO, DEPARTAMENTO, PROYECTO son tipos de entidad típicos en una base de datos organizacional.
Atributos
Los atributos describen las propiedades de las entidades. Cada atributo tiene un dominio de valores permitidos. Los atributos se clasifican en varias categorías. Los atributos simples son atómicos e indivisibles (como el DNI). Los atributos compuestos pueden dividirse en partes más pequeñas (como una dirección en calle, ciudad, código postal). Los atributos monovaluados toman un solo valor por entidad, mientras que los multivaluados pueden tomar múltiples valores (como números de teléfono). Los atributos derivados se calculan a partir de otros atributos (como la edad a partir de la fecha de nacimiento). En los diagramas ER, los atributos se representan con óvalos conectados a su entidad.
Relaciones
Una relación es una asociación entre dos o más entidades. Por ejemplo, un empleado «trabaja en» un departamento. El grado de una relación es el número de entidades participantes: binarias (grado dos), ternarias (grado tres), etc. Las relaciones pueden tener sus propios atributos descriptivos, llamados atributos de relación. Por ejemplo, la relación «trabaja en» podría tener un atributo «fecha_inicio» indicando cuándo el empleado comenzó en ese departamento.
Cardinalidades
La cardinalidad especifica el número de instancias de una entidad que pueden asociarse con instancias de otra entidad a través de una relación. Las cardinalidades principales son uno a uno (1:1) donde cada instancia de A se relaciona con a lo sumo una instancia de B y viceversa; uno a muchos (1:N) donde cada instancia de A puede relacionarse con múltiples instancias de B, pero cada B con a lo sumo una A; y muchos a muchos (N:M) donde cada instancia de ambas entidades puede relacionarse con múltiples instancias de la otra. La cardinalidad se representa mediante números o símbolos en las líneas que conectan entidades con relaciones.
Participación
La participación indica si todas las instancias de una entidad deben participar en una relación. La participación total (o existencial) requiere que todas las instancias participen, representada con línea doble en el diagrama. La participación parcial permite que algunas instancias no participen, representada con línea simple. Por ejemplo, si todo empleado debe estar asignado a un departamento, EMPLEADO tiene participación total en la relación «trabaja en».
Entidades Débiles
Una entidad débil es aquella que no puede identificarse únicamente por sus propios atributos y depende de otra entidad (llamada entidad propietaria o fuerte) para su identificación. Por ejemplo, un DEPENDIENTE de un empleado podría ser una entidad débil, identificada por su nombre junto con el identificador del empleado del cual depende. Las entidades débiles se representan con rectángulos de doble línea, y su relación de identificación con la entidad fuerte se representa con un rombo de doble línea.
6.3. Modelo ER Extendido (EER)
El modelo ER Extendido añade conceptos de modelado más avanzados para capturar semántica más compleja. La especialización permite definir subclases de un tipo de entidad basándose en características distintivas. Por ejemplo, EMPLEADO puede especializarse en INGENIERO y GERENTE. La generalización es el proceso inverso: combinar tipos de entidad similares en una superclase. La herencia permite que las subclases hereden atributos de la superclase. La especialización puede ser total (todo miembro de la superclase debe pertenecer a alguna subclase) o parcial, y disjunta (las subclases son mutuamente exclusivas) o superpuesta (pueden solaparse).
6.4. Transformación de ER a Modelo Relacional
La transformación de un diagrama ER a un esquema relacional sigue reglas sistemáticas. Cada tipo de entidad fuerte se convierte en una tabla, con los atributos simples convirtiéndose en columnas. La clave candidata de la entidad se convierte en clave primaria de la tabla. Los atributos compuestos se aplanan incluyendo solo sus componentes atómicos. Los atributos multivaluados se representan mediante una tabla separada con una clave foránea referenciando la entidad original. Los atributos derivados típicamente se omiten del esquema relacional.
Las relaciones binarias uno a uno pueden implementarse añadiendo la clave primaria de una entidad como clave foránea en la otra (preferiblemente en la entidad con participación total). Las relaciones uno a muchos se implementan añadiendo la clave primaria del lado «uno» como clave foránea en el lado «muchos». Las relaciones muchos a muchos requieren una tabla de relación separada que contenga las claves primarias de ambas entidades participantes como clave foránea compuesta.
Las entidades débiles se convierten en tablas incluyendo una clave foránea que referencia la entidad propietaria. La clave primaria de la entidad débil es compuesta, combinando la clave foránea con su discriminador parcial. Para jerarquías de especialización, existen tres estrategias: crear una tabla única con todos los atributos de superclase y subclases (incluyendo un atributo tipo), crear tablas solo para las subclases incluyendo atributos heredados, o crear tablas para todos los niveles con claves foráneas conectándolas.
✅ Mejores Prácticas en Modelado ER
- Mantener el modelo conceptual independiente del SGBD específico durante el diseño ER
- Usar nombres significativos y consistentes para entidades, atributos y relaciones
- Documentar las asunciones y reglas de negocio que subyacen al modelo
- Validar el modelo con usuarios y expertos del dominio antes de transformarlo
- Evitar redundancias en el modelo conceptual (atributos derivables o relaciones redundantes)
- Considerar cuidadosamente qué debe modelarse como entidad versus atributo
7. El Lenguaje SQL
7.1. Historia y Evolución de SQL
SQL (Structured Query Language) fue desarrollado originalmente en IBM en los años setenta por Donald Chamberlin y Raymond Boyce, inicialmente llamado SEQUEL (Structured English Query Language). Se diseñó como lenguaje de consulta para el sistema System R, uno de los primeros prototipos de sistemas de bases de datos relacionales. El lenguaje fue estandarizado por primera vez por ANSI en 1986 (SQL-86), seguido por SQL-89, que añadió integridad referencial.
SQL-92 (también conocido como SQL2) fue una revisión mayor que añadió joins explícitos, operaciones de conjuntos, y capacidades mejoradas. SQL:1999 (SQL3) introdujo características objeto-relacionales, triggers, tipos definidos por usuario, y expresiones regulares. SQL:2003 añadió funciones ventana, secuencias, y características XML. SQL:2008 introdujo el operador MERGE y mejoras en TRUNCATE. SQL:2011 añadió soporte temporal para datos históricos. SQL:2016 introdujo búsqueda de patrones en filas y mejoras en JSON. SQL:2023, el estándar más reciente, añade capacidades para grafos de propiedades y JSON mejorado.
7.2. Componentes de SQL
DDL – Data Definition Language
El lenguaje de definición de datos permite crear, modificar y eliminar estructuras de base de datos. Los comandos principales incluyen CREATE para crear objetos (tablas, índices, vistas, esquemas), ALTER para modificar estructuras existentes, DROP para eliminar objetos, y TRUNCATE para vaciar tablas rápidamente. DDL también permite definir restricciones de integridad como claves primarias, claves foráneas, restricciones CHECK, y valores por defecto.
Ejemplo CREATE TABLE:
CREATE TABLE EMPLEADO (
empleado_id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
fecha_nacimiento DATE,
salario DECIMAL(10,2) CHECK (salario >= 0),
departamento_id INT,
FOREIGN KEY (departamento_id)
REFERENCES DEPARTAMENTO(departamento_id)
ON DELETE SET NULL
ON UPDATE CASCADE
);
DML – Data Manipulation Language
El lenguaje de manipulación de datos permite consultar y modificar los datos. SELECT recupera datos de una o más tablas, soportando filtrado (WHERE), agrupación (GROUP BY), ordenación (ORDER BY), joins, subconsultas, y operaciones de conjuntos. INSERT añade nuevas filas a una tabla. UPDATE modifica filas existentes. DELETE elimina filas. Estos comandos pueden afectar múltiples filas simultáneamente mediante condiciones WHERE apropiadas.
Ejemplo SELECT complejo:
SELECT d.nombre_departamento,
AVG(e.salario) as salario_promedio,
COUNT(*) as num_empleados
FROM EMPLEADO e
INNER JOIN DEPARTAMENTO d ON e.departamento_id = d.departamento_id
WHERE e.fecha_contratacion >= '2020-01-01'
GROUP BY d.nombre_departamento
HAVING AVG(e.salario) > 40000
ORDER BY salario_promedio DESC;
DCL – Data Control Language
El lenguaje de control de datos gestiona permisos y autorización. GRANT otorga privilegios a usuarios o roles sobre objetos de base de datos. REVOKE retira privilegios previamente otorgados. Los privilegios pueden ser granulares (SELECT, INSERT, UPDATE, DELETE sobre tablas específicas) o más amplios (ALL PRIVILEGES). Los roles permiten agrupar privilegios y asignarlos colectivamente a usuarios.
TCL – Transaction Control Language
El lenguaje de control de transacciones gestiona transacciones. COMMIT confirma permanentemente los cambios realizados en la transacción actual. ROLLBACK deshace todos los cambios desde el inicio de la transacción o desde el último COMMIT. SAVEPOINT crea puntos de control intermedios dentro de una transacción, permitiendo rollback parcial. SET TRANSACTION configura características de la transacción como nivel de aislamiento.
7.3. Características Avanzadas de SQL
Subconsultas
Las subconsultas son consultas anidadas dentro de otra consulta. Pueden ser escalares (devuelven un solo valor), de fila (devuelven una fila), de columna (devuelven múltiples filas de una columna), o de tabla (devuelven múltiples filas y columnas). Pueden aparecer en cláusulas SELECT, FROM, WHERE, o HAVING. Las subconsultas correlacionadas hacen referencia a tablas de la consulta externa y se ejecutan una vez por cada fila de la consulta externa.
Funciones de Ventana
Las funciones de ventana (introducidas en SQL:2003) realizan cálculos sobre un conjunto de filas relacionadas con la fila actual, sin colapsar el conjunto de resultados como haría GROUP BY. Permiten operaciones como numeración de filas (ROW_NUMBER), clasificación (RANK, DENSE_RANK), agregaciones móviles, y acceso a filas adyacentes (LAG, LEAD). Se definen mediante la cláusula OVER con especificaciones de partición y orden.
CTE – Common Table Expressions
Las expresiones de tabla común permiten definir conjuntos de resultados temporales con nombre que pueden referenciarse dentro de una consulta. Se definen con la cláusula WITH y mejoran la legibilidad de consultas complejas. Los CTE recursivos permiten consultas que referencian a sí mismas, útiles para procesar jerarquías o grafos, como estructuras organizacionales o árboles de categorías.
Vistas
Una vista es una tabla virtual definida por una consulta. Las vistas proporcionan abstracción de datos, simplifican consultas complejas, y mejoran la seguridad al restringir el acceso a ciertas filas o columnas. Las vistas simples (sobre una tabla, sin agregaciones) son generalmente actualizables. Las vistas materializadas almacenan físicamente los resultados y se actualizan periódicamente, mejorando el rendimiento de consultas complejas a cambio de posible desactualización de datos.
Procedimientos Almacenados y Triggers
Los procedimientos almacenados son programas guardados en la base de datos que encapsulan lógica de negocio compleja. Aceptan parámetros, pueden contener lógica condicional y bucles, y mejoran el rendimiento al reducir el tráfico de red. Los triggers son procedimientos que se ejecutan automáticamente en respuesta a eventos específicos (INSERT, UPDATE, DELETE) en una tabla. Pueden ejecutarse BEFORE o AFTER el evento, y tienen acceso a los valores OLD y NEW de las filas afectadas.
⚠️ Portabilidad de SQL
Aunque SQL está estandarizado, cada SGBD implementa extensiones propietarias y puede tener variaciones en la sintaxis. Características avanzadas como procedimientos almacenados, tipos de datos específicos, y funciones integradas varían significativamente entre sistemas. Al diseñar aplicaciones que necesiten portabilidad entre SGBD, es recomendable ceñirse a SQL estándar y aislar el código específico del SGBD en capas de abstracción.
8. Normas y Estándares para la Interoperabilidad
8.1. El Estándar SQL ISO/IEC
El estándar SQL está definido conjuntamente por ISO (International Organization for Standardization) e IEC (International Electrotechnical Commission). El estándar completo se denomina ISO/IEC 9075 y consta de múltiples partes que cubren diferentes aspectos del lenguaje. La parte uno define el marco general y conceptos, la parte dos especifica la fundación del lenguaje SQL (Core SQL), la parte tres define la invocación a SQL desde otros lenguajes (SQL/CLI y embedded SQL), y partes adicionales cubren aspectos como tipos definidos por usuario, XML, JSON, y funciones de programación.
8.2. ODBC – Open Database Connectivity
ODBC es un estándar de facto desarrollado originalmente por Microsoft para acceso a bases de datos desde aplicaciones Windows, posteriormente adoptado como estándar por el grupo X/Open. Define una API de nivel de llamada (Call Level Interface) que permite a aplicaciones escritas en C o C++ conectarse y operar sobre diferentes SGBD mediante drivers específicos. ODBC proporciona una capa de abstracción que aísla la aplicación de las particularidades de cada SGBD. La arquitectura ODBC consta de cuatro componentes: la aplicación, el gestor de drivers (Driver Manager), el driver específico del SGBD, y la fuente de datos (el SGBD mismo).
Los drivers ODBC pueden ser de un nivel (la aplicación accede directamente a archivos de datos) o multinivel (el driver traduce llamadas ODBC a llamadas del SGBD). ODBC soporta múltiples niveles de conformidad API (Core, Level uno, Level dos) que especifican qué funciones están disponibles. Las aplicaciones configuran Data Source Names (DSN) que encapsulan información de conexión, permitiendo cambiar de SGBD sin modificar código de aplicación.
8.3. JDBC – Java Database Connectivity
JDBC es el estándar de Java para conectividad con bases de datos, parte de la Java Platform Standard Edition. Define una API orientada a objetos que permite ejecutar operaciones SQL desde código Java de manera independiente del SGBD. La arquitectura JDBC es similar a ODBC: las aplicaciones Java usan la API JDBC, que se comunica con drivers específicos del SGBD.
Existen cuatro tipos de drivers JDBC. El tipo uno (puente JDBC-ODBC, deprecado) traduce llamadas JDBC a ODBC. El tipo dos (driver parcialmente Java) usa código nativo para comunicarse con el SGBD. El tipo tres (driver de middleware) se comunica con un servidor intermedio que traduce a protocolo específico del SGBD. El tipo cuatro (driver Java puro) implementa directamente el protocolo de red del SGBD en Java puro, siendo el más eficiente y portable.
JDBC incluye características avanzadas como soporte para procedimientos almacenados, prepared statements (consultas precompiladas para mejor rendimiento y seguridad), gestión de transacciones con diferentes niveles de aislamiento, manejo de tipos de datos específicos de SGBD mediante ResultSet, y batch updates para operaciones masivas eficientes.
8.4. ADO.NET
ADO.NET es la tecnología de acceso a datos de Microsoft para aplicaciones .NET Framework y .NET Core. Proporciona un conjunto de componentes para acceso eficiente a bases de datos relacionales y otras fuentes de datos. ADO.NET soporta dos modos de operación: conectado (usando objetos Connection, Command, DataReader) y desconectado (usando DataSet y DataAdapter).
El modo desconectado es particularmente innovador: permite cargar datos en memoria, trabajar con ellos offline, y posteriormente sincronizar cambios con la base de datos. Los data providers específicos de SGBD (SqlClient para SQL Server, OracleClient para Oracle, etc.) implementan la funcionalidad core. Entity Framework, construido sobre ADO.NET, proporciona un marco ORM (Object-Relational Mapping) que permite trabajar con datos como objetos .NET en lugar de tablas y filas.
8.5. Conectividad Moderna
Las tecnologías más recientes de acceso a datos incluyen ORMs (Object-Relational Mappers) como Hibernate para Java, Entity Framework para .NET, Django ORM para Python, y Active Record para Ruby. Estos marcos proporcionan una capa de abstracción completa que mapea objetos del lenguaje de programación a tablas de base de datos, generando automáticamente SQL y gestionando relaciones.
Las arquitecturas de microservicios han popularizado APIs REST y GraphQL como interfaces de acceso a datos, con el SGBD accesible solo desde servicios backend. Los conectores nativos específicos de SGBD (como psycopg2 para PostgreSQL en Python, mysql-connector para MySQL) ofrecen mejor rendimiento que interfaces genéricas. Los pools de conexiones optimizan el uso de recursos reutilizando conexiones establecidas. Las bibliotecas async/await modernas permiten acceso asíncrono no bloqueante para alto rendimiento en aplicaciones concurrentes.
9. Principales SGBD Comerciales
9.1. Oracle Database
Oracle Database es el SGBD comercial más establecido y ampliamente utilizado en entornos empresariales de misión crítica. Desarrollado por Oracle Corporation desde 1977, actualmente en su versión 23c (2024), ofrece características empresariales avanzadas incluyendo Real Application Clusters (RAC) para alta disponibilidad mediante servidores agrupados, Active Data Guard para réplicas síncronas y asíncronas, particionamiento avanzado para gestión de grandes volúmenes, compresión y encriptación transparentes, y Autonomous Database que utiliza machine learning para autotuning y autopatch.
Oracle se destaca por su rendimiento en cargas OLTP de alta concurrencia, su extenso ecosistema de herramientas (Oracle Enterprise Manager, SQL Developer, APEX), y características avanzadas como flashback para recuperación a punto en el tiempo, materalized views con refresh incremental, y soporte para JSON, XML y datos espaciales. El modelo de licenciamiento se basa en procesadores o usuarios nombrados, con costos significativos que lo posicionan en el segmento enterprise. Oracle Exadata son appliances integrados hardware-software optimizados para máximo rendimiento.
9.2. Microsoft SQL Server
Microsoft SQL Server es el SGBD de Microsoft, fuertemente integrado con el ecosistema Windows y Azure. La versión actual es SQL Server 2022, aunque muchas organizaciones utilizan SQL Server 2019 o versiones anteriores. Características destacables incluyen Integration Services (SSIS) para ETL, Analysis Services (SSAS) para cubos OLAP y modelos tabulares, Reporting Services (SSRS) para generación de informes, Always On Availability Groups para alta disponibilidad, columnstore indexes para cargas analíticas, e in-memory OLTP para máximo rendimiento transaccional.
SQL Server Management Studio (SSMS) es un entorno integral de administración muy apreciado por su usabilidad. Azure SQL Database es la versión cloud completamente gestionada, con variantes como SQL Managed Instance que ofrece mayor compatibilidad con SQL Server on-premise. SQL Server Express es una edición gratuita con limitaciones de tamaño y recursos, adecuada para aplicaciones pequeñas. El licenciamiento se basa en cores de procesador o usuarios simultáneos (CAL – Client Access License).
9.3. IBM Db2
IBM Db2 (Database 2) tiene una larga historia desde los años ochenta y sigue siendo relevante en entornos mainframe y empresariales, especialmente en sectores financieros y gubernamentales. Db2 11.5 y Db2 Warehouse son versiones actuales. Características clave incluyen soporte nativo para mainframe z/OS con integración CICS y IMS, particionamiento multi-dimensional para data warehousing, BLU Acceleration con compresión columnar y procesamiento in-memory, soporte para JSON, XML y datos temporales, y Db2 pureScale para escalabilidad horizontal con arquitectura shared-disk.
Db2 se distingue por su robustez en entornos de alto volumen transaccional, integración profunda con herramientas IBM (WebSphere, InfoSphere), y optimización para cargas mixtas OLTP/OLAP. IBM Cloud Pak for Data integra Db2 en una plataforma unificada de datos e IA. El licenciamiento puede ser perpetuo o por suscripción, basado en procesadores virtuales o PVUs (Processor Value Units).
9.4. SAP HANA
SAP HANA es una plataforma in-memory más reciente (lanzada en 2010) que combina funcionalidades de base de datos relacional, procesamiento analítico, y capa de aplicación. A diferencia de los SGBD tradicionales basados en disco, HANA mantiene todos los datos en memoria RAM, logrando velocidades de consulta órdenes de magnitud superiores. Utiliza compresión columnar agresiva que permite mantener datasets masivos en memoria a costo razonable.
HANA soporta cargas OLTP y OLAP simultáneamente sin réplicas (HTAP – Hybrid Transactional/Analytical Processing), procesamiento de texto completo avanzado, predicción y machine learning integrados, y replicación asíncrona para disaster recovery. Es la plataforma preferida para aplicaciones SAP S/4HANA ERP. Los requisitos de hardware son exigentes (grandes cantidades de RAM) y el costo es elevado, posicionándolo en el segmento enterprise premium. SAP HANA Cloud ofrece la solución como servicio completamente gestionado.
| SGBD | Empresa | Ventajas Clave | Casos de Uso Típicos | Modelo de Licencia |
|---|---|---|---|---|
| Oracle Database | Oracle Corporation | Máxima robustez, RAC, particionamiento avanzado, ecosistema extenso | Enterprise OLTP crítico, banca, telecomunicaciones, ERP | Perpetua o suscripción, por procesador/usuario |
| SQL Server | Microsoft | Integración Windows/Azure, SSMS excelente, servicios BI integrados | Aplicaciones Windows, .NET, integración Azure, BI | Perpetua o suscripción, por core/CAL |
| Db2 | IBM | Líder en mainframe, robustez extrema, pureScale | Mainframe, sectores regulados, data warehousing | Perpetua o suscripción, por PVU |
| SAP HANA | SAP | In-memory, HTAP, velocidad extrema, ML integrado | SAP S/4HANA, analytics en tiempo real, IoT | Suscripción, basada en memoria/cores |
💰 Consideraciones de Costo Total de Propiedad (TCO)
Al evaluar SGBD comerciales, el costo de licencia es solo una parte del TCO. Considerar también costos de hardware (especialmente para HANA), mantenimiento anual (típicamente 22-25% del costo de licencia), consultoría para implementación, formación de personal, migraciones, y costos de salida si se decide cambiar de plataforma. Las versiones cloud pueden simplificar el modelo de costos mediante precios por uso, aunque pueden resultar más caras a largo plazo para cargas constantes.
10. SGBD de Código Abierto
10.1. PostgreSQL
PostgreSQL, frecuentemente llamado Postgres, es ampliamente considerado el SGBD relacional de código abierto más avanzado. Originado en el proyecto POSTGRES de la Universidad de California Berkeley en 1986, ha evolucionado hasta convertirse en un sistema de nivel enterprise completo. La versión actual es PostgreSQL 16 (2024), con PostgreSQL 17 en desarrollo.
Características distintivas incluyen cumplimiento extremadamente riguroso con estándares SQL, soporte para tipos de datos avanzados (arrays, hstore, JSON/JSONB, XML, tipos geométricos), extensibilidad mediante funciones definidas por usuario en múltiples lenguajes (PL/pgSQL, Python, Perl, C), índices avanzados (B-tree, Hash, GiST, SP-GiST, GIN, BRIN), replicación streaming nativa con replicas síncronas y asíncronas, y control de concurrencia MVCC (Multi-Version Concurrency Control) que permite alto rendimiento en lecturas concurrentes.
PostgreSQL se destaca por su extensibilidad: extensiones populares incluyen PostGIS para datos geoespaciales (estándar de facto en GIS), TimescaleDB para series temporales, Citus para distribución horizontal, pgvector para vectores de embeddings de IA, y pg_stat_statements para análisis de rendimiento. La comunidad PostgreSQL es muy activa con conferencias globales, documentación excelente y soporte comercial disponible de múltiples vendors (EnterpriseDB, Crunchy Data, 2ndQuadrant).
10.2. MySQL y MariaDB
MySQL es probablemente el SGBD de código abierto más popular históricamente, especialmente en aplicaciones web (stack LAMP: Linux, Apache, MySQL, PHP). Creado en 1995 por MySQL AB, fue adquirido por Sun Microsystems en 2008 y posteriormente por Oracle Corporation en 2010. La versión actual es MySQL 8.4 (2024), que introdujo mejoras significativas en rendimiento, características JSON, y ventanas analíticas.
MySQL Community Edition es completamente gratuito bajo licencia GPL, mientras que MySQL Enterprise Edition ofrece funcionalidades adicionales, herramientas de monitorización, y soporte comercial. Características incluyen múltiples motores de almacenamiento (InnoDB es el predeterminado, soporta transacciones ACID; MyISAM para tablas de solo lectura rápidas), replicación maestro-esclavo y maestro-maestro, Group Replication para alta disponibilidad, MySQL Cluster para escalabilidad horizontal con arquitectura shared-nothing, y MySQL Router para proxy transparente.
MariaDB surgió como un fork de MySQL en 2009 cuando la comunidad estaba preocupada por la adquisición de Oracle. Liderada por el creador original de MySQL Michael Widenius, MariaDB mantiene alta compatibilidad con MySQL pero ha divergido añadiendo características propias como motores de almacenamiento alternativos (Aria, ColumnStore para analytics), Galera Cluster integrado para multi-master replication, y características de SQL avanzadas antes que MySQL. MariaDB Server es completamente código abierto; MariaDB Enterprise ofrece soporte y herramientas adicionales.
10.3. SQLite
SQLite es único entre los SGBD: es una biblioteca C embebida en la aplicación en lugar de un proceso servidor separado. La base de datos completa se almacena en un solo archivo portable entre plataformas. SQLite es probablemente la base de datos más desplegada en el mundo, utilizada en prácticamente todos los smartphones (Android e iOS), navegadores web (almacenamiento local), aplicaciones de escritorio, y dispositivos IoT.
SQLite es ideal para aplicaciones embebidas, prototipos rápidos, almacenamiento local en aplicaciones móviles y desktop, y datasets de tamaño pequeño a mediano que no requieren acceso concurrente de escritura. Sus limitaciones incluyen falta de soporte para concurrencia de escritura (solo un escritor a la vez), sin usuarios ni permisos, sin procedimientos almacenados nativos, y tipos de datos dinámicos flexibles pero menos estrictos que otros SGBD. Es completamente de dominio público (no requiere atribución ni licencia), extremadamente estable, bien documentado, y sorprendentemente capaz para su simplicidad.
10.4. Otros SGBD de Código Abierto
Firebird es un SGBD completo descendiente de Borland InterBase, con soporte ACID completo, procedimientos almacenados, triggers, y deployment embebido o cliente-servidor. Es popular en aplicaciones legacy y en algunos países de Europa del Este. Apache Derby (también conocido como Java DB) es un SGBD escrito completamente en Java, embebible en aplicaciones Java, con footprint pequeño. H2 Database es un SGBD Java más moderno y rápido que Derby, con modos embebido y servidor, compatible con PostgreSQL y MySQL, popular en testing y desarrollo.
CockroachDB, aunque más reciente (2015) y con modelo de negocio diferente (core open source, enterprise propietario), merece mención como base de datos distribuida SQL que implementa el modelo relacional sobre arquitectura distribuida inspirada en Google Spanner, con consistencia fuerte y resiliencia ante fallos de nodos o datacenters completos.
| SGBD | Características Destacadas | Ventajas | Casos de Uso Ideales |
|---|---|---|---|
| PostgreSQL | Máxima conformidad SQL, extensiones, JSONB, PostGIS, tipos avanzados | Muy completo, robusto, excelente para complejos datos estructurados y semi-estructurados | Aplicaciones enterprise, GIS, analytics, data warehousing moderno |
| MySQL | Velocidad, simplicidad, stack LAMP, replicación flexible | Muy rápido para lecturas, configuración simple, ecosistema maduro | Aplicaciones web, CMS (WordPress, Drupal), OLTP simple |
| MariaDB | Compatible MySQL+, Galera Cluster, ColumnStore, completamente open source | Todo el código abierto, innovación rápida, multi-master nativo | Aplicaciones web, migración desde MySQL, alta disponibilidad |
| SQLite | Embebido, archivo único, sin configuración, dominio público | Cero administración, extremadamente portable, fiable | Móviles, desktop apps, IoT, testing, prototipos |
| Firebird | ACID completo, footprint pequeño, embebido o servidor | Estable, maduro, bajo consumo recursos | Aplicaciones legacy, SMBs, Windows desktop apps |
✅ Selección de SGBD de Código Abierto
Elige PostgreSQL si: Necesitas máxima conformidad SQL, características avanzadas, datos geoespaciales, o JSON extensivo. Ideal para aplicaciones complejas y analytics.
Elige MySQL/MariaDB si: Priorizas velocidad de lectura, simplicidad, o tienes infraestructura LAMP existente. Excelente para aplicaciones web tradicionales.
Elige SQLite si: Desarrollas aplicación embebida, móvil, o necesitas base de datos sin administración. Perfecto para prototipos y almacenamiento local.
11. Mapa Conceptual del Modelo Relacional
Fundamentos Matemáticos y Teóricos
Relaciones, Tuplas, Atributos, Dominios, Claves
ER, Normalización, Restricciones
Álgebra, Cálculo, SQL
SGBD Comerciales y Open Source
Estándares, APIs, Conectividad
Primaria
Foránea
Candidata
Superclave
Entidades
Relaciones
Cardinalidad
Atributos
1FN – 2FN – 3FN
BCNF – 4FN – 5FN
σ Selección
π Proyección
⋈ Join
∪ Unión
DDL – DML
DCL – TCL
SQL:2023
RAC, Exadata
Autonomous DB
Azure SQL
SSMS, BI Services
PostGIS, JSONB
Extensibilidad
LAMP Stack
Galera Cluster
Conectividad
Portabilidad
Transacciones en línea
E-commerce, Banca
Análisis de datos
Data Warehousing
AWS RDS, Azure SQL
GCP Cloud SQL
SQLite
Móviles, IoT
ERP, CRM
Sistemas Críticos
Leyenda del Mapa Conceptual
12. Preguntas de Test – Evaluación de Conocimientos
Pregunta 1
¿Cuál de las siguientes afirmaciones sobre las formas normales es CORRECTA?
Pregunta 2
En el álgebra relacional, ¿cuál es la operación equivalente a la consulta SQL: SELECT DISTINCT nombre, departamento FROM EMPLEADO WHERE salario > 50000?
Pregunta 3
Respecto a las 12 reglas de Codd para sistemas relacionales verdaderos, ¿cuál de estas afirmaciones es CORRECTA?
Pregunta 4
En el modelo Entidad-Relación, ¿cuál es la forma CORRECTA de transformar una relación muchos a muchos (N:M) al modelo relacional?
Pregunta 5
¿Qué característica distingue principalmente a PostgreSQL de otros SGBD de código abierto?
Pregunta 6
En relación con la restricción de integridad referencial, ¿qué acción se ejecuta cuando se especifica «ON DELETE CASCADE»?
Pregunta 7
En la arquitectura de tres esquemas ANSI-SPARC, ¿cuál es el propósito principal del nivel externo?
Pregunta 8
¿Cuál de las siguientes afirmaciones sobre SQL y sus componentes es INCORRECTA?
Pregunta 9
En el contexto de normalización, una dependencia funcional X → Y es una dependencia transitiva si:
Pregunta 10
¿Qué driver JDBC proporciona la mejor portabilidad y rendimiento para aplicaciones Java modernas?
Pregunta 11
En Oracle Database, ¿qué tecnología proporciona alta disponibilidad mediante clustering de múltiples servidores que comparten la misma base de datos?
Pregunta 12
¿Qué operación del álgebra relacional es necesaria para expresar consultas del tipo «encontrar todos los X que están relacionados con TODOS los Y»?
Pregunta 13
En el modelo relacional, ¿cuál es la principal diferencia entre una clave candidata y una clave primaria?
Pregunta 14
¿Qué característica distingue a SAP HANA de los SGBD tradicionales basados en disco?
Pregunta 15
En el cálculo relacional de tuplas, ¿qué representa la expresión {t | EMPLEADO(t) ∧ t.salario > 50000}?
Pregunta 16
¿Cuál es la principal ventaja de utilizar funciones de ventana (window functions) en SQL en lugar de GROUP BY?
Pregunta 17
Respecto a las entidades débiles en el modelo Entidad-Relación, ¿cuál afirmación es CORRECTA?
Pregunta 18
¿Qué SGBD de código abierto es más apropiado para aplicaciones móviles y embebidas que requieren una base de datos sin servidor?
Pregunta 19
En el contexto de ODBC (Open Database Connectivity), ¿cuál es la función principal del Driver Manager?
Pregunta 20
¿Cuál de las siguientes situaciones justifica la desnormalización controlada de una base de datos?
Pregunta 21
En SQL:2023, el estándar más reciente, ¿cuál es una de las principales nuevas capacidades añadidas?
Pregunta 22
¿Qué propiedad del álgebra relacional establece que el resultado de cualquier operación sobre relaciones es también una relación?
Pregunta 23
En Microsoft SQL Server, ¿qué componente proporciona capacidades de ETL (Extract, Transform, Load)?
Pregunta 24
¿Cuál es la diferencia principal entre MySQL y MariaDB en términos de gobernanza y licenciamiento?
Pregunta 25
En el diseño de bases de datos, ¿cuál es el objetivo principal de alcanzar la Tercera Forma Normal (3FN)?
13. Respuestas Correctas y Justificaciones
Soluciones Detalladas del Test de Evaluación
Pregunta 1: Respuesta Correcta: B
Justificación: La forma normal de Boyce-Codd (BCNF) es efectivamente más restrictiva que la 3FN. Mientras que la 3FN permite que atributos no clave determinen otros atributos no clave si no hay transitividad a través de la clave primaria, BCNF exige que SOLO las superclaves puedan determinar otros atributos. Es decir, para toda dependencia funcional no trivial X → Y en una relación en BCNF, X debe ser una superclave. Esto elimina ciertas anomalías que pueden persistir en 3FN cuando existen múltiples claves candidatas que se solapan. La opción A es incorrecta porque precisamente la 2FN y 3FN se diseñaron para eliminar dependencias transitivas. La opción C confunde 4FN (que trata dependencias multivaluadas) con dependencias funcionales parciales. La opción D es incorrecta porque las formas normales son jerárquicas: para estar en 3FN necesariamente se debe estar en 2FN y 1FN.
Pregunta 2: Respuesta Correcta: B
Justificación: En álgebra relacional, primero debemos aplicar la selección (σ) para filtrar las filas que cumplen la condición salario > 50000, y después aplicar la proyección (π) para seleccionar solo las columnas nombre y departamento. La proyección automáticamente elimina duplicados (equivalente al DISTINCT de SQL). Por lo tanto: πnombre,departamento(σsalario>50000(EMPLEADO)). La opción A es incorrecta porque aplicaría la selección después de la proyección, pero una vez que hemos proyectado perdemos la columna salario y no podemos filtrar por ella. La opción C incluiría la columna salario en el resultado final, lo cual no corresponde a la consulta SQL dada. La opción D utiliza join incorrectamente cuando no hay ninguna operación de combinación de tablas en la consulta original.
Pregunta 3: Respuesta Correcta: D
Justificación: La Regla 4 de Codd (Catálogo Dinámico en Línea Basado en el Modelo Relacional) establece efectivamente que la descripción de la base de datos debe ser representada en el nivel lógico de la misma manera que los datos ordinarios, de modo que los usuarios autorizados puedan aplicar el mismo lenguaje relacional a su consulta que aplican a los datos regulares. En términos prácticos, esto significa que las tablas del sistema, las vistas, restricciones y otros metadatos deben almacenarse en tablas que pueden consultarse mediante SQL estándar. La opción A es incorrecta porque ningún SGBD comercial cumple TODAS las reglas completamente. La opción B es imprecisa: la Regla 6 establece que todas las vistas «teóricamente» actualizables deben serlo, pero en la práctica esto es extremadamente complejo y ningún sistema lo logra completamente. La opción C confunde independencia física (Regla 8) con independencia lógica (Regla 9).
Pregunta 4: Respuesta Correcta: B
Justificación: Una relación muchos a muchos (N:M) en el modelo ER no puede representarse directamente en el modelo relacional con solo dos tablas, porque cada tabla solo puede tener una clave primaria que identifica unívocamente cada fila. La solución estándar es crear una tabla intermedia (también llamada tabla de unión, asociación o bridge table) que contenga las claves primarias de ambas entidades como claves foráneas. La clave primaria de esta tabla intermedia será típicamente la combinación de ambas claves foráneas (clave compuesta), permitiendo representar todas las asociaciones posibles. Por ejemplo, si tenemos ESTUDIANTE y ASIGNATURA con relación N:M «matriculado_en», crearíamos: ESTUDIANTE(id_estudiante, …), ASIGNATURA(id_asignatura, …), y MATRICULA(id_estudiante, id_asignatura, …) donde (id_estudiante, id_asignatura) forma la clave primaria compuesta. La opción A solo funciona para relaciones 1:N. La opción C destruiría la estructura relacional generando masiva redundancia. La opción D es innecesariamente complicada e incorrecta.
Pregunta 5: Respuesta Correcta: C
Justificación: PostgreSQL se distingue por su conformidad extremadamente rigurosa con los estándares SQL (mucho más que MySQL), su arquitectura extensible que permite añadir funciones en múltiples lenguajes de programación (PL/pgSQL, Python, Perl, C, etc.), y su soporte para tipos de datos avanzados incluyendo JSONB (binary JSON con indexación eficiente), arrays, hstore, tipos geométricos, rangos, y tipos definidos por usuario. Estas características lo posicionan como el SGBD open source más completo y avanzado. La opción A es incorrecta porque múltiples SGBD open source soportan ACID (MySQL con InnoDB, MariaDB, Firebird, etc.). La opción B describe SQLite, no PostgreSQL. La opción D describe características típicamente asociadas con MySQL y su motor MyISAM (aunque InnoDB es ahora el motor predeterminado de MySQL).
Pregunta 6: Respuesta Correcta: C
Justificación: ON DELETE CASCADE especifica que cuando se elimina una tupla de la tabla referenciada (la que contiene la clave primaria), todas las tuplas en las tablas que la referencian mediante claves foráneas deben eliminarse automáticamente en cascada. Por ejemplo, si tenemos CLIENTE(id) y PEDIDO(id, cliente_id) con FOREIGN KEY (cliente_id) REFERENCES CLIENTE(id) ON DELETE CASCADE, al eliminar un cliente se eliminarán automáticamente todos sus pedidos. Esto mantiene la integridad referencial evitando referencias huérfanas. La opción A describe el comportamiento predeterminado sin CASCADE (RESTRICT o NO ACTION). La opción B describe ON DELETE SET NULL. La opción D describe ON UPDATE CASCADE (para actualizaciones, no eliminaciones).
Pregunta 7: Respuesta Correcta: B
Justificación: El nivel externo en la arquitectura de tres esquemas ANSI-SPARC representa las vistas individualizadas de diferentes usuarios o grupos de usuarios sobre la base de datos. Su propósito es proporcionar perspectivas personalizadas que muestren solo los datos relevantes para cada usuario u ocultando información sensible o innecesaria, mejorando así tanto la seguridad como la usabilidad. Por ejemplo, un departamento de ventas podría tener una vista externa que muestre información de clientes y pedidos pero no datos financieros sensibles. En el modelo relacional, estas vistas externas se implementan mediante el comando CREATE VIEW de SQL. La opción A describe el nivel interno. La opción C describe el nivel conceptual. La opción D describe funciones del gestor de transacciones, no de un nivel de abstracción.
Pregunta 8: Respuesta Correcta: C
Justificación: La opción C es INCORRECTA porque los comandos SELECT, INSERT, UPDATE y DELETE pertenecen a DML (Data Manipulation Language), NO a TCL. TCL (Transaction Control Language) incluye comandos relacionados con la gestión de transacciones: COMMIT (confirmar cambios permanentemente), ROLLBACK (deshacer cambios), SAVEPOINT (crear punto de control intermedio), y SET TRANSACTION (configurar propiedades de la transacción como nivel de aislamiento). Las demás opciones son correctas: DDL gestiona estructuras de base de datos, DCL gestiona permisos y autorización, y DML efectivamente maneja la manipulación y consulta de datos.
Pregunta 9: Respuesta Correcta: B
Justificación: Una dependencia transitiva ocurre cuando un atributo depende de la clave primaria a través de otro atributo intermedio que no es clave. Formalmente, si tenemos X → Z y Z → Y, donde Z no es superclave ni parte de ninguna clave candidata, entonces Y depende transitivamente de X. Por ejemplo, en EMPLEADO(id, nombre, departamento_id, departamento_nombre), si departamento_nombre depende de departamento_id, y departamento_id depende de id, entonces departamento_nombre depende transitivamente de id. La tercera forma normal (3FN) se diseñó específicamente para eliminar estas dependencias transitivas, separando departamento_nombre en una tabla DEPARTAMENTO aparte. La opción A describe cualquier dependencia funcional básica. La opción C describe una dependencia trivial. La opción D describe atributos dentro de una clave compuesta, no una dependencia transitiva.
Pregunta 10: Respuesta Correcta: D
Justificación: Los drivers JDBC Tipo 4 (Pure Java drivers) son los más recomendados para aplicaciones Java modernas porque están escritos completamente en Java, implementan directamente el protocolo de red específico del SGBD, no requieren software cliente nativo instalado, son completamente portables entre plataformas (write once, run anywhere), y generalmente ofrecen el mejor rendimiento al eliminar capas de traducción. Ejemplos incluyen PostgreSQL JDBC Driver, MySQL Connector/J, y Oracle JDBC Thin Driver. El Tipo 1 (puente JDBC-ODBC) está deprecado y fue eliminado en Java 8. El Tipo 2 requiere bibliotecas nativas específicas del sistema operativo, comprometiendo portabilidad. El Tipo 3 añade latencia al requerir un servidor intermedio.
Pregunta 11: Respuesta Correcta: B
Justificación: Real Application Clusters (RAC) es la tecnología de Oracle que permite que múltiples servidores (nodos) accedan simultáneamente a una única base de datos compartida, proporcionando alta disponibilidad y escalabilidad. Si un nodo falla, los otros nodos continúan proporcionando servicio. RAC utiliza una arquitectura shared-disk donde todos los nodos acceden al mismo almacenamiento mediante una red de alta velocidad (típicamente InfiniBand), con un sistema de caché coherente global (GCS/GES) que sincroniza el acceso a bloques de datos entre nodos. Active Data Guard (opción A) es para réplicas en standby, no clustering activo-activo. Autonomous Database (opción C) es la oferta cloud autotuning de Oracle. GoldenGate (opción D) es para replicación de datos entre sistemas heterogéneos.
Pregunta 12: Respuesta Correcta: C
Justificación: La operación de división (÷) del álgebra relacional se utiliza específicamente para consultas que involucran cuantificación universal («para todo»). Si tenemos R(X,Y) y S(Y), entonces R ÷ S devuelve todas las tuplas X de R que están asociadas con TODAS las tuplas Y de S. Por ejemplo, para encontrar «estudiantes matriculados en TODAS las asignaturas», si MATRICULA(estudiante_id, asignatura_id) y ASIGNATURA(asignatura_id), entonces MATRICULA ÷ ASIGNATURA devolvería los estudiantes que cumplen el criterio. La división es la operación más difícil de implementar en SQL y típicamente requiere subconsultas con NOT EXISTS. El join natural (opción A) combina tuplas basándose en atributos comunes. El producto cartesiano (opción B) genera todas las combinaciones posibles. La intersección (opción D) encuentra tuplas comunes entre dos relaciones.
Pregunta 13: Respuesta Correcta: B
Justificación: La principal diferencia entre clave candidata y clave primaria es conceptual y de selección, no de propiedades intrínsecas. Una tabla puede tener múltiples claves candidatas (todas las superclaves minimales que pueden identificar únicamente cada tupla), y el diseñador de la base de datos selecciona UNA de ellas como clave primaria, que será el identificador principal utilizado en la implementación física y en las referencias de claves foráneas. Las demás claves candidatas no seleccionadas se llaman claves alternativas. Todas las claves candidatas tienen las mismas propiedades de unicidad y no admiten valores nulos si se implementan correctamente, aunque algunos SGBD solo imponen la restricción NOT NULL automáticamente en la clave primaria. La opción A es incorrecta porque ninguna clave candidata debería contener nulos para cumplir su función de identificación. La opción C es falsa: una clave primaria puede tener más o menos atributos que otras candidatas. La opción D invierte la multiplicidad correcta.
Pregunta 14: Respuesta Correcta: C
Justificación: SAP HANA se distingue fundamentalmente de los SGBD tradicionales por su arquitectura completamente in-memory: mantiene TODOS los datos primariamente en memoria RAM en lugar de en disco. Utiliza compresión columnar agresiva (los datos se almacenan por columnas, no por filas) que permite almacenar grandes volúmenes de datos en memoria a un costo razonable, y procesar consultas analíticas extremadamente rápido al leer solo las columnas necesarias. Esta arquitectura elimina los cuellos de botella de I/O de disco que limitan a los SGBD tradicionales, permitiendo velocidades de consulta órdenes de magnitud superiores. HANA también puede procesar cargas OLTP y OLAP simultáneamente (HTAP – Hybrid Transactional/Analytical Processing) sin necesidad de réplicas. Aunque utiliza persistencia en disco para durabilidad mediante logs y snapshots, las operaciones trabajan primariamente sobre datos en memoria. Las opciones A, B y D describen características comunes a múltiples SGBD, no específicas de HANA.
Pregunta 15: Respuesta Correcta: B
Justificación: En el cálculo relacional de tuplas, la variable t representa una tupla completa (fila entera), no atributos individuales. La expresión {t | EMPLEADO(t) ∧ t.salario > 50000} se lee como «el conjunto de todas las tuplas t tales que t pertenece a la relación EMPLEADO Y el atributo salario de t es mayor que 50000». El resultado es el conjunto de tuplas completas (todas las columnas) que satisfacen ambas condiciones. Si solo quisiéramos atributos específicos, usaríamos una expresión como {t.nombre, t.departamento | EMPLEADO(t) ∧ t.salario > 50000}. El cálculo relacional es declarativo: especifica QUÉ tuplas queremos en el resultado, no CÓMO obtenerlas (eso es el álgebra relacional). La opción A confunde tuplas con atributos. La opción C describe una agregación (SUM). La opción D describe una cuenta (COUNT), que requeriría un operador de agregación no expresado en la fórmula dada.
Pregunta 16: Respuesta Correcta: B
Justificación: La principal ventaja de las funciones de ventana (window functions) sobre GROUP BY es que permiten realizar cálculos agregados (como SUM, AVG, COUNT) o analíticos (como ROW_NUMBER, RANK, LAG, LEAD) sobre un «ventana» de filas relacionadas con la fila actual, SIN colapsar el conjunto de resultados. Con GROUP BY, las filas se agrupan y solo se devuelve una fila por grupo con los valores agregados. Con funciones de ventana, TODAS las filas originales se mantienen en el resultado, pero cada fila puede tener acceso a cálculos sobre su «ventana». Por ejemplo, podemos calcular el salario promedio por departamento Y mantener todas las filas de empleados con sus datos individuales en una sola consulta: SELECT nombre, departamento, salario, AVG(salario) OVER (PARTITION BY departamento) as salario_prom_dept FROM EMPLEADO. Esto sería imposible con GROUP BY sin subconsultas. La opción A es incorrecta porque el rendimiento depende del caso específico. La opción C es falsa: los índices ayudan igual en ambos casos. La opción D es incorrecta: las funciones de ventana son independientes de subconsultas.
Pregunta 17: Respuesta Correcta: C
Justificación: Una entidad débil es aquella que no puede identificarse únicamente por sus propios atributos y depende de una entidad fuerte (propietaria) para su identificación. La transformación al modelo relacional requiere que la clave primaria de la entidad débil sea COMPUESTA, formada por: (1) la clave foránea que referencia la clave primaria de la entidad propietaria, MÁS (2) el discriminador parcial (también llamado clave parcial), que es el atributo o conjunto de atributos que distingue las instancias de la entidad débil dentro del contexto de una instancia específica de la entidad propietaria. Por ejemplo, EMPLEADO-DEPENDIENTE donde DEPENDIENTE(empleado_id, nombre_dependiente, fecha_nacimiento), y la clave primaria sería (empleado_id, nombre_dependiente). La opción A es incorrecta porque las entidades débiles típicamente tienen participación TOTAL en su relación de identificación. La opción B contradice la definición: sin la entidad propietaria, las instancias de entidad débil pierden su significado. La opción D es falsa: las entidades débiles pueden tener múltiples atributos descriptivos adicionales.
Pregunta 18: Respuesta Correcta: C
Justificación: SQLite es el SGBD ideal para aplicaciones móviles y embebidas porque es una biblioteca C que se enlaza directamente con la aplicación en lugar de ser un proceso servidor separado. La base de datos completa se almacena en un único archivo que puede incluirse fácilmente en el paquete de la aplicación. SQLite no requiere configuración, instalación, ni administración de servidor; no tiene usuarios ni autenticación (la seguridad la gestiona el sistema operativo mediante permisos de archivo); tiene un footprint de memoria extremadamente pequeño; es completamente multiplataforma; y es de dominio público (sin restricciones de licencia). Prácticamente todos los smartphones Android e iOS usan SQLite para almacenamiento local de aplicaciones. PostgreSQL (opción A) y MySQL/MariaDB (opciones B y D) son sistemas cliente-servidor que requieren un proceso servidor en ejecución, configuración de red, y gestión de recursos, lo que los hace inadecuados para dispositivos móviles o aplicaciones embebidas pequeñas.
Pregunta 19: Respuesta Correcta: B
Justificación: El Driver Manager en la arquitectura ODBC actúa como intermediario entre la aplicación y los drivers específicos de SGBD. Sus funciones principales incluyen: (1) cargar y descargar dinámicamente los drivers apropiados según el DSN (Data Source Name) especificado en la conexión, (2) rutear las llamadas de función ODBC desde la aplicación al driver correcto, (3) gestionar múltiples conexiones y drivers simultáneos, y (4) proporcionar funciones de inicialización y diagnóstico. El Driver Manager no traduce SQL ni optimiza consultas (eso es responsabilidad del driver específico y del SGBD), ni gestiona pools de conexiones por sí mismo (aunque algunos gestores avanzados pueden proporcionar esta funcionalidad). La arquitectura ODBC de cuatro capas es: Aplicación → Driver Manager → Driver específico SGBD → SGBD. La opción A describe funciones del driver. La opción C describe funciones del optimizador del SGBD. La opción D describe connection pooling, que típicamente se implementa en middleware adicional.
Pregunta 20: Respuesta Correcta: B
Justificación: La desnormalización es la introducción deliberada de redundancia en una base de datos previamente normalizada, con el objetivo de mejorar el rendimiento de consultas específicas. Está justificada cuando las consultas críticas y frecuentes requieren joins complejos entre múltiples tablas que afectan significativamente el tiempo de respuesta. Por ejemplo, en un sistema de comercio electrónico, podríamos duplicar el nombre del producto en la tabla de detalles de pedido (además de mantenerlo en la tabla de productos) para evitar joins al generar informes de pedidos históricos. Sin embargo, la desnormalización debe aplicarse CUIDADOSAMENTE con plena conciencia de sus inconvenientes: aumenta la complejidad de las actualizaciones (todos los datos duplicados deben mantenerse sincronizados, típicamente mediante triggers), consume más espacio de almacenamiento, y aumenta el riesgo de inconsistencias. Solo debe aplicarse cuando las mediciones de rendimiento demuestran un problema real y después de agotar otras alternativas como índices apropiados, vistas materializadas, o cache de aplicación. La opción A describe normalización, no desnormalización. La opción C es incorrecta: la normalización no necesita «simplificación». La opción D sería una práctica terrible que destruiría la integridad de datos.
Pregunta 21: Respuesta Correcta: C
Justificación: SQL:2023, publicado en junio de 2023, es el estándar SQL más reciente y añade capacidades significativas para grafos de propiedades (property graphs) permitiendo modelar y consultar datos de grafos directamente en SQL, y mejoras sustanciales en el procesamiento de JSON incluyendo nuevas funciones, sintaxis simplificada para consultas JSON, y mejor integración entre datos relacionales y JSON. También incluye mejoras en funciones de ventana, expresiones de tabla polimórficas, y características adicionales de seguridad. Las opciones A, B y D son incorrectas porque describen características fundamentales que existen desde las primeras versiones de SQL (transacciones ACID desde SQL-92, SELECT desde SQL-86, funciones agregadas desde SQL-86). La evolución de SQL ha sido consistente: SQL-86/89 (fundamentos), SQL-92 (joins explícitos), SQL:1999 (características objeto-relacionales), SQL:2003 (funciones ventana), SQL:2008 (MERGE), SQL:2011 (datos temporales), SQL:2016 (JSON básico), SQL:2023 (grafos, JSON avanzado).
Pregunta 22: Respuesta Correcta: B
Justificación: La propiedad de clausura algebraica es fundamental en el álgebra relacional y establece que todas las operaciones del álgebra toman relaciones como entrada y producen relaciones como salida. Esta propiedad es crucial porque permite componer operaciones: el resultado de una operación puede utilizarse inmediatamente como entrada para otra operación, permitiendo construir expresiones complejas a partir de operaciones simples. Por ejemplo, πnombre(σsalario>50000(EMPLEADO ⋈ DEPARTAMENTO)) aplica join, luego selección, luego proyección, donde cada operación intermedia produce una relación válida. La clausura también garantiza que el modelo relacional es matemáticamente bien definido y que cualquier consulta expresable en álgebra relacional producirá una relación válida como resultado. La conmutatividad (opción A) es una propiedad de operaciones específicas (la unión es conmutativa, la diferencia no), no del álgebra en general. La normalización (opción C) se refiere al diseño de esquemas. La integridad referencial (opción D) es una restricción sobre datos, no una propiedad algebraica.
Pregunta 23: Respuesta Correcta: B
Justificación: SQL Server Integration Services (SSIS) es el componente de Microsoft SQL Server diseñado específicamente para procesos ETL (Extract, Transform, Load). SSIS permite extraer datos de múltiples fuentes heterogéneas (archivos planos, Excel, XML, bases de datos diversas, servicios web), transformarlos mediante un amplio conjunto de transformaciones (conversiones de tipo, agregaciones, joins, búsquedas, limpieza de datos, manipulación de cadenas), y cargarlos en destinos diversos. Proporciona un entorno visual de diseño (SQL Server Data Tools / Visual Studio) donde los flujos ETL se construyen mediante paquetes gráficos con tareas y transformaciones. SSIS es fundamental para integración de datos, migración, consolidación, data warehousing y sincronización de datos entre sistemas. SQL Server Management Studio (opción A) es la herramienta de administración y consulta. SQL Server Reporting Services (opción C) genera informes y reportes. SQL Server Analysis Services (opción D) proporciona capacidades OLAP y minería de datos para análisis multidimensional.
Pregunta 24: Respuesta Correcta: B
Justificación: MariaDB surgió en 2009 como un fork de MySQL liderado por Michael Widenius (creador original de MySQL) y otros desarrolladores originales de MySQL, como respuesta a las preocupaciones de la comunidad open source cuando Oracle Corporation adquirió MySQL. La diferencia clave es de gobernanza y licenciamiento: MariaDB mantiene TODO su código completamente open source bajo licencia GPL, garantizando que permanecerá libre y de código abierto indefinidamente. MySQL, aunque tiene una edición Community gratuita bajo GPL, también ofrece MySQL Enterprise Edition con características propietarias y requiere licencias comerciales pagas, y su desarrollo está controlado por Oracle. MariaDB ha añadido características propias (motores de almacenamiento adicionales como Aria y ColumnStore, Galera Cluster integrado, características SQL avanzadas) mientras mantiene alta compatibilidad con MySQL, posicionándose como un «drop-in replacement» mejorado. La opción A es incorrecta: MySQL Community es open source. La opción C es falsa: ambos soportan ACID con InnoDB. La opción D es incorrecta: MariaDB mantiene alta compatibilidad con sintaxis MySQL.
Pregunta 25: Respuesta Correcta: C
Justificación: El objetivo específico de la Tercera Forma Normal (3FN) es eliminar dependencias transitivas entre atributos no clave. Una dependencia transitiva ocurre cuando un atributo no clave depende de otro atributo no clave (que a su vez depende de la clave primaria), en lugar de depender directamente de la clave. Por ejemplo, si EMPLEADO tiene (id, nombre, departamento_id, nombre_departamento, ubicacion_departamento), y nombre_departamento y ubicacion_departamento dependen de departamento_id (no de id directamente), existe dependencia transitiva. La 3FN exige separar esto en EMPLEADO(id, nombre, departamento_id) y DEPARTAMENTO(departamento_id, nombre_departamento, ubicacion_departamento). Esto previene anomalías de actualización: sin 3FN, actualizar el nombre de un departamento requeriría modificar múltiples filas de empleados, con riesgo de inconsistencias si alguna actualización falla. La opción A describe 1FN. La opción B describe 2FN. La opción D describe 4FN. Las formas normales son jerárquicas: 1FN → 2FN → 3FN → BCNF → 4FN → 5FN, cada una eliminando tipos específicos de redundancia y anomalías.
14. Referencias Bibliográficas
14.1. Libros Fundamentales
- Elmasri, R. & Navathe, S. B. (2023). Fundamentals of Database Systems (8th ed.). Pearson. – Texto universitario completo sobre bases de datos, considerado el estándar en educación.
- Silberschatz, A., Korth, H. F., & Sudarshan, S. (2020). Database System Concepts (7th ed.). McGraw-Hill. – Cobertura exhaustiva de teoría y práctica de sistemas de bases de datos.
- Date, C. J. (2019). Database Design and Relational Theory: Normal Forms and All That Jazz (2nd ed.). Apress. – Tratamiento riguroso de la teoría relacional y normalización.
- Ramakrishnan, R. & Gehrke, J. (2003). Database Management Systems (3rd ed.). McGraw-Hill. – Enfoque equilibrado entre teoría e implementación práctica.
- Codd, E. F. (1990). The Relational Model for Database Management: Version 2. Addison-Wesley. – Obra definitiva del creador del modelo relacional.
14.2. Estándares y Especificaciones
- ISO/IEC 9075:2023. Information technology — Database languages — SQL. International Organization for Standardization.
- ANSI X3.135-1992. Database Language SQL. American National Standards Institute.
- Microsoft Corporation. (2024). SQL Server 2022 Documentation. https://docs.microsoft.com/sql/
- Oracle Corporation. (2024). Oracle Database 23c Documentation. https://docs.oracle.com/database/
- PostgreSQL Global Development Group. (2024). PostgreSQL 16 Documentation. https://www.postgresql.org/docs/
14.3. Documentación Técnica de SGBD
- PostgreSQL Documentation. (2024). The PostgreSQL Global Development Group. https://www.postgresql.org/docs/ – Documentación oficial extremadamente completa y bien organizada.
- MySQL Reference Manual. (2024). Oracle Corporation. https://dev.mysql.com/doc/ – Documentación oficial de MySQL 8.x.
- MariaDB Knowledge Base. (2024). MariaDB Foundation. https://mariadb.com/kb/ – Documentación oficial de MariaDB Server.
- SQLite Documentation. (2024). SQLite Development Team. https://www.sqlite.org/docs.html – Documentación completa del motor embebido.
- IBM Db2 Documentation. (2024). IBM Corporation. https://www.ibm.com/docs/db2 – Recursos oficiales de Db2.
14.4. Artículos Académicos Seminales
- Codd, E. F. (1970). «A Relational Model of Data for Large Shared Data Banks». Communications of the ACM, 13(6), 377-387. – El artículo fundacional del modelo relacional.
- Codd, E. F. (1985). «Is Your Database Really Relational?» y «Does Your DBMS Run By the Rules?». ComputerWorld. – Artículos donde Codd presenta sus 12 reglas.
- Chen, P. P. (1976). «The Entity-Relationship Model: Toward a Unified View of Data». ACM Transactions on Database Systems, 1(1), 9-36. – Introducción del modelo ER.
- Fagin, R. (1977). «Multivalued Dependencies and a New Normal Form for Relational Databases». ACM Transactions on Database Systems, 2(3), 262-278. – Introducción de 4FN.
- Armstrong, W. W. (1974). «Dependency Structures of Data Base Relationships». IFIP Congress, 580-583. – Axiomas de Armstrong para dependencias funcionales.
14.5. Recursos Online y Tutoriales
- W3Schools SQL Tutorial. https://www.w3schools.com/sql/ – Tutorial interactivo excelente para principiantes en SQL.
- SQLZoo. https://sqlzoo.net/ – Plataforma interactiva para aprender y practicar SQL.
- DB-Engines Ranking. https://db-engines.com/ – Rankings actualizados de popularidad y características de SGBD.
- Stanford Database Course Materials. https://cs145-fa19.github.io/ – Materiales del curso CS145 de Stanford.
- Use The Index, Luke! https://use-the-index-luke.com/ – Guía excelente sobre indexación y optimización SQL.
14.6. Especificaciones de Conectividad
- Microsoft Corporation. (2024). ODBC API Reference. https://docs.microsoft.com/sql/odbc/ – Documentación oficial de la API ODBC.
- Oracle Corporation. (2024). JDBC API Specification. https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/ – Especificación JDBC oficial.
- X/Open Group. (1995). X/Open SQL and RDA Standards. The Open Group. – Estándares históricos de interoperabilidad SQL.
- IETF RFC 1006. (1987). ISO Transport Service on top of the TCP. – Estándares de protocolos de red para bases de datos.
