Bases de datos SQL: Historia, fundamentos y buenas prácticas en la era de los datos

En un mundo cada vez más impulsado por la información, las bases de datos relacionales y el lenguaje SQL (Structured Query Language) siguen siendo una de las piedras angulares de la industria del software. A pesar de la aparición de tecnologías NoSQL y otras arquitecturas de almacenamiento, las bases de datos SQL conservan un papel protagónico en innumerables aplicaciones críticas, gracias a su robustez, estandarización y su enfoque estricto en la integridad de los datos.

Este artículo ofrece una visión integral del universo de las bases de datos SQL. Comenzaremos explorando sus orígenes históricos, pasando luego a describir los fundamentos del modelo relacional, el funcionamiento de las transacciones y las propiedades ACID. Posteriormente, analizaremos la importancia de la normalización en el diseño de esquemas, los índices y la optimización de consultas. Además, se presentará el papel de vistas, procedimientos almacenados y disparadores (triggers), así como la comparación con bases de datos NoSQL. Finalmente, abordaremos la integración de SQL en distintos entornos, las tendencias actuales (incluidas las implementaciones en la nube y el Big Data) y cerraremos con algunas recomendaciones y conclusiones acerca del futuro de SQL.

A lo largo del texto se mencionarán diversas fuentes y referencias bibliográficas (incluyendo publicaciones académicas y documentos técnicos oficiales) para profundizar en cada tema de interés. Con ello se pretende que este artículo sea un punto de partida sólido para profesionales y estudiantes que deseen fortalecer sus conocimientos acerca de las bases de datos SQL y sus aplicaciones prácticas.

Bases de datos SQL Historia, fundamentos y buenas prácticas en la era de los datos

Breve historia de las bases de datos relacionales y SQL

La historia de las bases de datos relacionales comienza con el trabajo de Edgar F. Codd a finales de la década de 1960 y principios de la de 1970, cuando este investigador, trabajando para IBM, planteó los principios del modelo relacional en su artículo “A Relational Model of Data for Large Shared Data Banks” (1970) 111. En ese entonces, las bases de datos orientadas a redes y jerárquicas eran la norma, pero las ideas de Codd ofrecieron una nueva forma de organizar la información de manera consistente y lógica.

Posteriormente, a mediados de los años 70, se desarrolló en IBM el primer prototipo de lenguaje relacional bautizado inicialmente como SEQUEL (Structured English Query Language), que más tarde adoptaría el nombre definitivo de SQL (Structured Query Language). La estandarización por parte del ANSI (American National Standards Institute) y de la ISO (International Organization for Standardization) en los años 80 y 90 consolidó a SQL como el lenguaje universal de consulta y definición de datos en bases relacionales 222.

Con la comercialización de sistemas de gestión de bases de datos relacionales (RDBMS) a finales de los 70 y durante los 80 —entre los que destacan Oracle (1977), IBM Db2 (1983), Microsoft SQL Server (1989) y más tarde MySQL (1995) y PostgreSQL (que evolucionó del proyecto Ingres de la Universidad de California en Berkeley)—, el uso de SQL se extendió a innumerables organizaciones y aplicaciones. Hoy, las diferentes implementaciones mantienen extensiones específicas, pero todas se basan en el mismo estándar de SQL.

Ejemplos Prácticos de Bases de Datos Relacionales

Fundamentos del modelo relacional

El modelo relacional postulado por Codd se basa en la representación de los datos mediante relaciones, frecuentemente llamadas tablas. Cada tabla consta de:

  1. Filas (tuplas): Cada fila representa un registro o instancia de la entidad que define la tabla.
  2. Columnas (atributos): Las columnas representan las características o propiedades de la entidad.

Por ejemplo, una tabla “Clientes” podría tener columnas como “ID_Cliente”, “Nombre”, “Dirección” y “Email”. Cada fila correspondería a un cliente específico. Para mantener la consistencia y la integridad de los datos, se utilizan los siguientes conceptos clave:

  • Clave primaria (Primary Key): Identifica de manera única cada fila dentro de una tabla.
  • Clave foránea (Foreign Key): Crea vínculos entre tablas, haciendo referencia a la clave primaria de otra tabla.
  • Restricciones (Constraints): Definen reglas a cumplir (por ejemplo, “NOT NULL”, “UNIQUE”) para evitar datos inconsistentes.

La principal ventaja del modelo relacional es la independencia lógica de los datos. Esto significa que podemos alterar la estructura de las tablas (añadiendo o eliminando columnas, modificando tipos de datos) sin que las aplicaciones que consumen estos datos se vean forzosamente afectadas, siempre que se mantenga la misma semántica de acceso. De este modo, la información permanece consistente y centralizada, alineada con las reglas de negocio.

Lenguaje SQL: subconjuntos principales

SQL no es un lenguaje monolítico; se compone de varios subconjuntos de instrucciones, cada uno diseñado para propósitos específicos. Los más reconocidos son:

  1. DDL (Data Definition Language): Permite definir y modificar la estructura de la base de datos. Instrucciones como CREATE, ALTER y DROP sirven para crear, alterar o eliminar tablas, índices, esquemas, vistas y otros objetos de la base de datos.
  2. DML (Data Manipulation Language): Engloba instrucciones orientadas a la manipulación de registros dentro de las tablas (inserción, actualización y borrado). Por ejemplo, INSERT, UPDATE y DELETE.
  3. DQL (Data Query Language): A menudo se incluye dentro de DML, pero algunos la separan para destacar la importancia de SELECT, la instrucción fundamental para consultar datos.
  4. DCL (Data Control Language): Se refiere a la administración de permisos y seguridad en la base de datos. Instrucciones como GRANT o REVOKE permiten otorgar o quitar privilegios de acceso.
  5. TCL (Transaction Control Language): Sirve para el manejo de transacciones con comandos como COMMIT, ROLLBACK y SAVEPOINT.

Esta división deja clara la potencia de SQL: no solo se encarga de leer datos, sino que gestiona la estructura, la seguridad y la consistencia de las operaciones dentro de la base de datos.

Normalización y diseño de esquemas

La normalización es un proceso que busca optimizar la organización de los datos, minimizar la duplicidad y reducir inconsistencias. Se define en términos de “formas normales” (1FN, 2FN, 3FN, BCNF, etc.), cada una con reglas más estrictas. Los principios básicos incluyen:

  • Primera Forma Normal (1FN): Todos los atributos deben ser atómicos (sin valores compuestos o multivaluados).
  • Segunda Forma Normal (2FN): Además de cumplir 1FN, requiere que todos los atributos no clave dependan de la clave primaria completa, evitando dependencias parciales en claves compuestas.
  • Tercera Forma Normal (3FN): Exige que no existan dependencias transitivas, es decir, un atributo no clave no puede depender de otro atributo no clave.

La normalización reduce la duplicación de datos y promueve la coherencia, facilitando la mantenibilidad a largo plazo. Sin embargo, en algunos casos (sobre todo en data warehouses u operaciones de lectura intensiva) se recurre a la desnormalización para agilizar consultas de agregación, asumiendo cierta duplicidad controlada a cambio de mayor rendimiento.

Propiedades ACID y manejo de transacciones

Las bases de datos SQL son reconocidas por adherirse a las propiedades ACID (Atomicity, Consistency, Isolation, Durability), consideradas esenciales para garantizar la fiabilidad de los datos:

  1. Atomicidad: Una transacción debe ejecutarse de forma completa o no ejecutarse en absoluto. Si ocurre un fallo a mitad de una operación, el sistema revierte cualquier cambio parcial para mantener la coherencia.
  2. Consistencia: Al finalizar una transacción, la base de datos debe permanecer en un estado válido, cumpliendo todas las restricciones y reglas definidas.
  3. Aislamiento: Las transacciones concurrentes no deberían interferir de manera que alteren la consistencia de los datos. Se establecen distintos niveles de aislamiento (READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ y SERIALIZABLE) para equilibrar el rendimiento y la consistencia.
  4. Durabilidad: Una vez confirmada (COMMIT) una transacción, sus efectos deben persistir incluso ante fallos del sistema. Se logran con mecanismos de registro (logs) y respaldos.

El control de transacciones se administra con sentencias TCL, como COMMIT para confirmar y ROLLBACK para deshacer cambios no deseados. El cumplimiento estricto de ACID es un diferenciador clave de las bases de datos SQL frente a otras soluciones que optan por “consistencia eventual”.

Índices y optimización de consultas

A medida que las bases de datos crecen en tamaño y complejidad, la velocidad de acceso y actualización de los datos se vuelve crítica. En este escenario, los índices cumplen un papel determinante:

  • Índices basados en árboles B-Tree (o variantes B+Tree): Son los más comunes en motores como InnoDB (MySQL) o SQL Server. Permiten la búsqueda ordenada y rápida en una columna o conjunto de columnas.
  • Índices agrupados (clustered indexes): En algunos SGBD (por ejemplo, SQL Server) se organiza físicamente la tabla según el índice principal, optimizando las búsquedas secuenciales por la clave primaria.
  • Índices no agrupados (non-clustered indexes): Almacenan copias parciales de los datos para acelerar consultas, pero no cambian el orden físico de la tabla.
  • Índices compuestos: Incluyen más de una columna, útiles para consultas que combinan filtros en varios campos.

Si bien los índices mejoran el rendimiento en consultas de lectura, incrementan el coste en las operaciones de escritura (INSERT, UPDATE, DELETE), pues el sistema debe mantener y actualizar los índices correspondientes.

La optimización de consultas va más allá de la creación de índices. Incluye la selección adecuada de tipos de datos, la revisión de planes de ejecución (para evitar table scans innecesarios), la elección de JOINS apropiados y el uso juicioso de subconsultas o expresiones de tabla (CTE). Además, es crucial mantener estadísticas actualizadas para que el optimizador de consultas elija el plan más eficiente.

Vistas, procedimientos almacenados y triggers

Las bases de datos SQL ofrecen mecanismos para encapsular y centralizar lógica de negocio:

  1. Vistas (Views): Son consultas almacenadas que se comportan como tablas virtuales. Simplifican la presentación de datos, unifican información de múltiples tablas y agregan una capa extra de seguridad al restringir columnas sensibles.
  2. Procedimientos almacenados (Stored Procedures): Son secuencias de sentencias SQL alojadas en la base de datos que pueden ser ejecutadas con un simple comando. Reducen el tráfico de red y aseguran que la lógica se mantenga cercana a los datos.
  3. Triggers (disparadores): Se activan automáticamente ante eventos (INSERT, UPDATE o DELETE). Permiten auditar cambios, mantener históricos o hacer cumplir reglas de negocio, pero un abuso de estos puede generar complejidad y dificultar la depuración.

Estos recursos potencian la capacidad de la base de datos para gestionar y proteger la lógica interna, disminuyendo la dependencia del código externo y facilitando la coherencia en sistemas donde múltiples aplicaciones acceden a la misma información.

SQL vs. NoSQL

En la última década, el concepto de NoSQL ha ganado relevancia, englobando bases de datos que no siguen el modelo relacional tradicional: documentos (MongoDB, CouchDB), grafos (Neo4j), clave-valor (Redis) o basadas en columnas (Cassandra, HBase). ¿En qué se diferencian esencialmente de SQL?

  • Modelo de datos: SQL emplea tablas con un esquema definido. NoSQL adopta estructuras más flexibles (documentos JSON, grafos, etc.).
  • Escalabilidad: Muchas bases NoSQL se diseñaron con escalado horizontal desde el principio. Mientras tanto, el escalado vertical ha sido históricamente la opción preferida para SQL, aunque existen prácticas de sharding y clústeres relacionales que mejoran la capacidad horizontal.
  • Consistencia: SQL prioriza consistencia fuerte (ACID), mientras que NoSQL puede ofrecer consistencia eventual para lograr mayor disponibilidad y rendimiento en entornos distribuidos.
  • Casos de uso: SQL sigue siendo la elección ideal cuando la integridad transaccional es fundamental (bancos, comercios electrónicos, sistemas gubernamentales), mientras que NoSQL resulta ventajoso en aplicaciones de Big Data y análisis en tiempo real con un gran volumen y variedad de datos.

La discusión no es “SQL contra NoSQL”, sino “SQL y/o NoSQL”, según las necesidades de la aplicación y el balance entre consistencia, disponibilidad y escalabilidad.

Casos de uso frecuentes de las bases de datos SQL

Las bases de datos relacionales se encuentran en múltiples sectores:

  1. Aplicaciones empresariales (ERP, CRM): Sistemas de planificación de recursos y gestión de clientes basan sus transacciones críticas en SQL por su consistencia transaccional.
  2. Finanzas y banca: Para contabilidad, transferencias y auditorías, el cumplimiento de ACID es innegociable; por ello, bancos y aseguradoras usan RDBMS.
  3. Comercio electrónico: Pedidos, carros de compra y catálogos de productos se manejan frecuentemente en SQL.
  4. Sistemas de salud: Historias clínicas, registros de pacientes, facturación y análisis epidemiológico se apoyan en la robustez y la seguridad de SQL.
  5. Analítica de datos y BI: Pese al auge de NoSQL en Big Data, la mayoría de data warehouses se basan en SQL gracias a su potencia para consultas y agregaciones complejas.

En resumidas cuentas, SQL sigue siendo un estándar dorado para aplicaciones donde la integridad, seguridad y manipulación avanzada de datos resultan imprescindibles.

Ejemplo práctico de consultas SQL

Para ejemplificar la sintaxis y funcionalidad de SQL, consideremos un pequeño esquema para una biblioteca, con las tablas:

  • Autores(AutorID INT, Nombre VARCHAR(100), PRIMARY KEY(AutorID))
  • Libros(LibroID INT, Titulo VARCHAR(200), FechaPublicacion DATE, PRIMARY KEY(LibroID))
  • Autor_Libro(AutorID INT, LibroID INT, PRIMARY KEY(AutorID, LibroID), FOREIGN KEY(AutorID) REFERENCES Autores(AutorID), FOREIGN KEY(LibroID) REFERENCES Libros(LibroID))

Creación de tablas (DDL):

sqlCopiarEditarCREATE TABLE Autores (
  AutorID INT PRIMARY KEY,
  Nombre VARCHAR(100) NOT NULL
);

CREATE TABLE Libros (
  LibroID INT PRIMARY KEY,
  Titulo VARCHAR(200) NOT NULL,
  FechaPublicacion DATE
);

CREATE TABLE Autor_Libro (
  AutorID INT NOT NULL,
  LibroID INT NOT NULL,
  PRIMARY KEY (AutorID, LibroID),
  FOREIGN KEY (AutorID) REFERENCES Autores(AutorID),
  FOREIGN KEY (LibroID) REFERENCES Libros(LibroID)
);

Inserción de datos (DML):

sqlCopiarEditarINSERT INTO Autores (AutorID, Nombre) 
VALUES (1, 'Gabriel García Márquez'), (2, 'Isabel Allende');

INSERT INTO Libros (LibroID, Titulo, FechaPublicacion) 
VALUES (1, 'Cien años de soledad', '1967-05-05'),
       (2, 'El amor en los tiempos del cólera', '1985-03-05'),
       (3, 'La casa de los espíritus', '1982-01-01');

INSERT INTO Autor_Libro (AutorID, LibroID)
VALUES (1, 1), (1, 2), (2, 3);

Consulta (DQL) con JOIN:

sqlCopiarEditarSELECT L.Titulo, A.Nombre 
FROM Libros L
JOIN Autor_Libro AL ON L.LibroID = AL.LibroID
JOIN Autores A ON AL.AutorID = A.AutorID;

El resultado vincula cada libro con su autor, demostrando cómo las claves foráneas permiten relacionar información distribuida en distintas tablas.

Arquitecturas de alta disponibilidad y escalabilidad

Para asegurar la disponibilidad continua en entornos de misión crítica, las bases de datos SQL pueden configurarse en diferentes arquitecturas:

  1. Replicación maestro-esclavo (Master-Slave): Un nodo principal gestiona las escrituras y replica los cambios a nodos secundarios que operan en modo solo lectura. Ante la caída del maestro, se promueve un esclavo a maestro.
  2. Clústeres activos-activos: Varias instancias aceptan operaciones de lectura y escritura, sincronizándose de forma simultánea. Esta estrategia es compleja, pero brinda alta escalabilidad.
  3. Sharding: Divide la base de datos en fragmentos distribuidos (shards), cada uno residiendo en un nodo distinto. Si bien se asocia más a NoSQL, también se implementa en bases relacionales para distribuir la carga.
  4. Servicios en la nube: Proveedores como AWS (Amazon RDS, Aurora), Microsoft Azure (Azure SQL Database) y Google Cloud (Cloud SQL) ofrecen bases de datos administradas con réplicas automáticas, balanceo de carga y respaldos programados.

Gracias a estos modelos, las bases de datos SQL pueden manejar grandes volúmenes de datos y brindar tiempos de actividad cercanos al 100%.

Seguridad y control de acceso

La seguridad es un aspecto clave de cualquier sistema de información. Los SGBD relacionales ofrecen múltiples mecanismos:

  • Gestión de usuarios y roles: Se pueden crear roles con privilegios específicos y asignarlos a usuarios.
  • Permisos granulares: Es posible conceder o revocar operaciones como SELECT, INSERT, UPDATE o DELETE en tablas, vistas o columnas puntuales.
  • Auditoría: Muchos motores (Oracle, SQL Server, PostgreSQL) tienen funcionalidades integradas para registrar quién accede a qué datos, en qué momento y qué cambios realiza.
  • Cifrado: Para proteger la información en tránsito (mediante SSL/TLS) o en reposo (TDE —Transparent Data Encryption— u otros métodos).

Cumplir regulaciones como GDPR, HIPAA o PCI-DSS demanda implementar controles de acceso sólidos, trazabilidad y protección criptográfica de la información sensible.

Integración con lenguajes de programación y herramientas

La universalidad de SQL se refleja en la amplia disponibilidad de controladores y librerías para lenguajes de programación como Java, Python, C#, PHP, Go, JavaScript (Node.js), Ruby, entre otros. Por ejemplo, en Python se suele emplear la librería psycopg2 para PostgreSQL, mysql-connector-python o PyODBC para conectarse a SQL Server. En Java, se utiliza JDBC (Java Database Connectivity) como estándar para la comunicación con bases de datos.

Además, existen frameworks ORM (Object-Relational Mapping) como Hibernate (Java), SQLAlchemy (Python), Entity Framework (C#) o Sequelize (Node.js), que agilizan la interacción con la base de datos al permitir mapear clases y objetos directamente en tablas, reduciendo la escritura manual de sentencias SQL repetitivas.

En el terreno analítico, herramientas como Tableau, Power BI, QlikView o las bibliotecas pandas (Python) se integran de forma nativa con bases de datos SQL. Esta compatibilidad hace de SQL un lenguaje ineludible para la extracción y manipulación de datos en proyectos de ciencia de datos, reporting y BI.

Aplicaciones en Data Warehousing y BI

Los data warehouses (almacenes de datos) son pilares de la inteligencia de negocios (BI). Aunque se asocian a análisis de gran escala y big data, la mayoría se fundamentan en bases relacionales y en la sintaxis de SQL:

  • Esquema en estrella (Star Schema): Estructura compuesta por una tabla de hechos (fact table) con medidas cuantitativas (por ejemplo, ventas), rodeada de tablas de dimensiones (fecha, producto, tienda).
  • Procesos ETL (Extract, Transform, Load): Extraen datos de los sistemas transaccionales (OLTP), los transforman para asegurar consistencia e integridad, y luego los cargan en el almacén.
  • OLAP (Online Analytical Processing): Permite consultas y análisis multidimensional. Herramientas como SQL Server Analysis Services (SSAS) o Oracle OLAP aprovechan la arquitectura relacional para ofrecer análisis en tiempo cercano al real y con un alto nivel de detalle.

SQL continúa siendo un recurso clave para la construcción de data marts y la realización de agregaciones, uniones y agrupaciones complejas, incluso cuando se integra con ecosistemas de Big Data (Hadoop, Spark) a través de motores como Hive o Presto.

Tendencias y futuro de SQL

A pesar de los cambios vertiginosos en el ecosistema de datos, SQL se mantiene actualizado e incorpora nuevas características para adaptarse a los requerimientos de escalabilidad y flexibilidad:

  1. Bases de datos en la nube: Servicios como Amazon Aurora o Azure SQL Database incluyen réplicas automáticas, escalado dinámico y actualización sin tiempo de inactividad, fortaleciendo la posición de SQL en entornos de nube pública y privada.
  2. Soporte para JSON y datos semiestructurados: PostgreSQL, MySQL y SQL Server han introducido tipos de datos JSON y funciones específicas para manipular contenido semiestructurado, extendiendo la flexibilidad a la hora de modelar información.
  3. Procesamiento distribuido: Extensiones y motores compatibles con PostgreSQL (Citus, Greenplum) o soluciones propias de proveedores (Oracle RAC, Microsoft Azure Synapse) facilitan la ejecución de consultas en cluster.
  4. Ejecución de machine learning dentro de la base de datos: Herramientas como SQL Server Machine Learning Services o extensiones de PostgreSQL permiten entrenar y ejecutar modelos de Machine Learning sin salir del entorno de la base de datos.
  5. SQL en Big Data: Proyectos como Apache Hive y Trino (Presto) brindan interfaces SQL para realizar análisis en grandes lagos de datos (Data Lakes), aprovechando el conocimiento existente en SQL para tareas analíticas en volúmenes masivos.

El futuro de SQL se vislumbra sólido, gracias a su madurez, la gran base de conocimiento en la comunidad de profesionales y su capacidad de adaptarse a paradigmas emergentes. Lejos de ser obsoleto, se proyecta que seguirá siendo la columna vertebral de infinidad de aplicaciones y entornos de análisis.

Buenas prácticas y recomendaciones finales

Para cerrar este recorrido, compartimos algunas buenas prácticas clave en el uso de bases de datos SQL:

  1. Diseñar con normalización: Comienza con un esquema normalizado (3FN o BCNF) y, si las necesidades de rendimiento lo ameritan, desnormaliza solo columnas críticas para consultas frecuentes.
  2. Elegir las claves primarias adecuadas: Optar por claves numéricas autoincrementales (o UUIDs) es una práctica habitual. Evita usar información susceptible de cambio (p.ej., correos electrónicos) como clave primaria.
  3. Creación cuidadosa de índices: Añadir índices en columnas usadas frecuentemente en filtros (WHERE) o uniones (JOIN). Pero no te excedas: demasiados índices ralentizan las operaciones de escritura.
  4. Uso juicioso de transacciones: Agrupar operaciones relacionadas en una sola transacción mejora la atomicidad y la eficiencia. No mantengas transacciones abiertas más tiempo del necesario para evitar bloqueos.
  5. Monitoreo y mantenimiento: Revisa planes de ejecución, analiza los tiempos de respuesta de consultas, actualiza estadísticas e implementa rutinas de mantenimiento (reconstruir índices, limpieza de registros obsoletos).
  6. Seguridad y respaldo: Aplica el principio de mínimo privilegio (least privilege), habilita el cifrado cuando sea posible y establece una política clara de respaldos periódicos y pruebas de restauración.
  7. Formación continua: Mantenerse al día con las actualizaciones de la versión específica de tu SGBD y con las novedades del estándar SQL te permitirá aprovechar nuevas características y optimizaciones.

Conclusiones

Las bases de datos SQL han trascendido las décadas como la tecnología predominante para el almacenamiento y la manipulación de datos estructurados. Desde la concepción del modelo relacional por Edgar F. Codd, pasando por la estandarización de SQL en los años 80, hasta las implementaciones cloud y distribuidas actuales, los fundamentos de integridad, consistencia y robustez se han mantenido inquebrantables.

Si bien las bases de datos NoSQL han surgido para solucionar problemas de escalado masivo, latencia y flexibilidad de esquemas, SQL continúa siendo la opción por excelencia para un sinfín de aplicaciones críticas en ámbitos empresariales, financieros, gubernamentales y de análisis avanzado de datos. Su sintaxis declarativa, su amplio ecosistema de herramientas y su respaldo por parte de la comunidad técnica aseguran su relevancia y evolución constante.

Para el científico de datos, el dominio de SQL resulta indispensable. No solo permite extraer y transformar datos de forma eficiente, sino también diseñar estructuras sólidas y escribir consultas que revelen información valiosa. En combinación con tecnologías de Big Data y servicios en la nube, SQL seguirá desempeñando un papel fundamental en la creación de soluciones escalables y de alto impacto en la era digital.

Fuentes y referencias

A continuación se listan diversas fuentes y referencias para profundizar en los temas tratados:

  1. Codd, E. F. (1970). A Relational Model of Data for Large Shared Data Banks. Communications of the ACM, 13(6), 377-387.
  2. Melton, J. & Simon, A. (1993). Understanding the New SQL: A Complete Guide. Morgan Kaufmann.
  3. Date, C. J. (2003). An Introduction to Database Systems (8.ª ed.). Addison-Wesley.
  4. ISO/IEC 9075. (2016). Information technology — Database languages — SQL.
  5. Elmasri, R. & Navathe, S. B. (2016). Fundamentals of Database Systems (7.ª ed.). Pearson.
  6. Kimball, R. & Ross, M. (2013). The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling (3.ª ed.). John Wiley & Sons.
  7. Oracle. (2023). Oracle Database Documentation.
  8. PostgreSQL Global Development Group. (2023). PostgreSQL Documentation.
  9. MySQL. (2023). MySQL Reference Manual.
  10. Microsoft. (2023). SQL Server Documentation.
  11. Apache Software Foundation. (2023). Apache Hive y Trino (Presto).

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll to Top