Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CursosBlogHolaMentoríaTaller
Bases de Datos
Temas
Introducción
Tipos de Bases de Datos
Entidades y Atributos
Tipos de Datos
CRUD
Lógica de Negocio
Llaves
Relaciones
Modelo Entidad-Relación
Normalización
Modelado de Datos
Aprende más
Introducción
El mundo moderno está completamente centrado en la información y los datos.
Los datos son una unidad singular de conocimiento. No tiene valor intrínseco por sí mismo. No podemos
extraerle significado sin saber más al respecto.
La información es algo que podemos vincular a los datos, para poder atribuirles un significado.
Un DBMS es un software que encapsula los datos de una base de datos y nos proporciona una forma de
almacenarlos, recuperarlos, editarlos, conservarlos y mucho más.
Le pedimos a un DBMS que sea eficiente, que almacene datos de forma privada y segura, que maneje
grandes cantidades de datos.
Aunque una base de datos puede ser tan simple como un archivo de texto separado por comas (CSV), para
aplicaciones robustas se recomienda utilizar DBMS como MySQL, PostgreSQL, MongoDB, Oracle, etc.
Los DBMS se pueden dividir en dos grandes grupos: relacionales (SQL) y no relacionales (NoSQL).
Regresar
Para responder esta pregunta, es muy importante conocer las diferencias entre una y otra y, sobre todo,
entender el tipo de aplicación que estamos realizando, ya que una mala elección de nuestra base de datos
puede dar lugar a una larga lista de problemas durante el desarrollo de la aplicación.
Se caracterizan por ser una colección ordenada de registros que se organizan en un conjunto de tablas. Una
tabla es muy parecido a una hoja de cálculo, y los registros se organizan en filas y columnas. Estas tablas
se relacionan entre sí. Para acceder a los datos, se usa el Lenguaje de Consultas Estructuradas, mejor
conocido por sus siglas en inglés como SQL, Structured Query Language.
Con SQL podemos obtener y alterar datos de una forma organizada siempre y cuando tengamos en cuenta
cuál es la estructura de la base de datos con la que estamos trabajando. Para ello, utilizaremos los distintos
comandos que SQL pone a nuestra disposición.
Las tablas de una bases de datos relacional se organizan a través de identificadores. De este modo, cada tabla
tiene un identificador único que es el que va a establecer su relación con el resto de tablas. A su vez, estos
identificadores hacen que sea más fácil organizar cada una de las tablas por separado.
Los DBMS relacionales se caracterizan por modelar la información en tablas que se relacionan entre sí.
Ejemplos son MySQL, MariaDB, PostgreSQL, SQLServer, Oracle, entre otros.
Las bases de datos no relacionales están diseñadas para modelos de datos con estructuras más específicas y
que no necesitan ser relacionados con otros. Cada entidad funciona de forma independiente y son mucho
más sencillas que las relacionales.
Esta sencillez de acceso y ordenación hace que en el panorama actual del Big Data estén cobrando mucha
relevancia, ya que al no tener una estructura definida como en las relacionales, se puedes tener redundancia
de datos, es decir, podemos tener datos repetidos.
¿Por qué se permite esto? Porque lo que buscamos es mejorar el rendimiento y se prioriza el acceso rápido
por sobre la normalización e integridad de los datos. En este tipo de modelos se requiere ahorrar poder
computo para poder procesar la mayor cantidad de datos en el menor tiempo posible.
Las bases de datos no relacionales pueden tener identificador único, pero este no se usará para relacionar
unos registros con otros. La información se organiza normalmente mediante documentos y es muy útil
cuando no tenemos un esquema exacto de lo que se va a almacenar.
Con respecto a los formatos que se utilizan en las bases de datos no relacionales, podríamos decir que el más
popular es el de un documento que es un objeto con una clave y un valor para que el acceso a la
información se pueda realizar de forma sencilla.
A todo este conjunto de bases de datos no relacionales, también se les asocia con el concepto de NoSQL que
significa: Not Only SQL, para hacer referencia a que no sólo la información de un sistema debe
almacenarse en modelos relacionales.
Los DBMS no relacionales modelan la información de diferentes formas: documentos, llave-valor, grafos,
entre otras. Ejemplos de DBMS no relacionales son MongoDB, Redis, Apache Cassandra, Firebase entre
otras.
Después de esta explicación, podemos decir que ambos tipos de bases de datos son útiles y dependerá del
tipo de aplicación que queramos realizar la elección de una u otra base de datos.
Así, si queremos desarrollar una aplicación de tipo contable, de inventario o de información de clientes, es
probable que el modelo relacional se adapte mejor a nuestras necesidades. En este tipo de aplicaciones,
normalmente habrá más de una tabla que tenga relación con el resto, por lo que una base de datos relacional
será más útil y podrá representar mejor nuestra aplicación.
Si por el contrario nuestra aplicación necesita de un sistema en el que los datos que se vayan a almacenar no
necesitan relacionarse unos con otros, y además no tenemos certeza de que todos los datos tengan la misma
estructura, entonces usaremos una base de datos no relacional. Por ejemplo puede ser una base de datos en la
que solo queramos almacenar las estadísticas de comportamiento de un usuario al visitar un sitio, o una base
para recolectar sus datos biométricos, esta información puede cambiar de una persona a otra, dependiendo
de sus dinámicas con el sitio o de su estado de salud y condición física para los biométricos. Otro ejemplo
sería la creación de una galería de fotos en Facebook o Instagram, cada usuario puede subir la cantidad de
fotos que guste sin que exista una estructura determinada. Las estadísticas de progreso de un videojuego
también serían un buen ejemplo de modelo no relacional, ya que la información de un jugador a otro puede
variar.
Por todo lo anterior, la elección del tipo de base de datos es algo muy importante y que no hay que tomarlo a
la ligera. La elección de un DBMS erróneo puede traer consecuencias fatales en el desarrollo de un proyecto,
por lo que es muy importante dedicarle tiempo y ver qué tipo se adapta mejor con el modelo de nuestro
proyecto.
La principal diferencia entre las bases de datos SQL y NoSQL es su estructura de almacenamiento de datos.
Las bases de datos SQL utilizan una estructura organizada y relacional, mientras que las bases de
datos NoSQL utilizan una estructura más flexible y escalable. Ambas tienen sus propias fortalezas y
debilidades, y la elección de una depende de las necesidades específicas de la aplicación y el tipo de datos
que deben almacenarse.
Aquí hay algunas consideraciones que puedes tener en cuenta al elegir entre un modelo de base de
datos SQL y NoSQL:
SQL
Relaciones estructuradas: Si tu aplicación depende de relaciones estructuradas y complejas entre tus datos, es posible
que desees considerar una base de datos SQL. Ya que permiten modelar relaciones complejas entre sus tablas y utilizar
lenguajes de consulta estandarizados para realizar consultas complejas.
Datos estructurados: Si tus datos tienen una estructura bien definida y poco probable que cambie con frecuencia, una
base de datos SQL es una buena opción, ya que permiten definir esquemas rigurosos que garantizan la integridad de los
datos y evitan la introducción de datos erróneos o inconsistentes.
NoSQL
Escalabilidad: Si tu aplicación está destinada a crecer rápidamente y manejar una gran cantidad de datos, es posible
que desees considerar una base de datos NoSQL. Estas son más escalables que las bases de datos SQL y se adaptan
mejor a grandes cantidades de datos no estructurados.
Datos no estructurados: Si tus datos no tienen una estructura bien definida o cambian con frecuencia, es posible que
desees considerar una base de datos NoSQL. Estas son más flexibles que las bases de datos SQL y te permiten modelar
tus datos de manera más natural.
Aplicaciones en tiempo real: Si tu aplicación requiere una respuesta rápida y en tiempo real, es posible que desees
considerar una base de datos NoSQL. Estas suelen ser más eficientes que las bases de datos SQL en términos de
rendimiento y escalabilidad en aplicaciones en tiempo real.
En última instancia, la elección entre un modelo de base de datos SQL o NoSQL depende de las necesidades
específicas de tu aplicación y de la naturaleza de tus datos. Es importante evaluar cuidadosamente tus
requisitos y considerar las fortalezas y debilidades de cada opción antes de tomar una decisión.
Regresar
Entidades y Atributos
Una entidad es un objeto del mundo real que se pretende controlar dentro del sistema, por ejemplo: una
persona, un producto, una cuenta, un servicio, una empresa, una compra, etc.
Las entidades al ser objetos, van a tener características que las describen, a estas propiedades se les
llama atributos de la entidad.
Por ejemplo la entidad persona tiene atributos tales como: nombre, apellidos, fecha de nacimiento, domicilio,
teléfono, correo, etc.
Lo primero que tenemos que hacer al diseñar una base de datos es hacer un listado de las entidades que se
verán involucradas en el sistema y de sus atributos.
Tipos de Entidades
De Datos
Las entidades de datos son aquellas que alimentan el sistema de información. En ellas se almacenan y se
interactúa con los datos.
Pivotes
Las entidades pivotes son las que relacionan la información de 2 o más entidades. Nos ayudan a mantener
consistencia e integridad en el sistema y evitan la duplicidad de datos. También suelen llamarse entidades de
enlace o asociación.
Por ejemplo en el proceso de una venta, una entidad pivote puede almacenar la relación de qué y cuántos
productos se adquirieron en dicha venta, además de relacionar dichos productos con la información del
cliente que los compró.
Catálogos
Los catálogos son entidades que sus registros son una lista o relación ordenada con algún criterio y por tal
motivo su información debe estar precargada en el sistema, antes de comenzar a introducir información en el.
Una lista de códigos postales, colonias, municipios, cuidades o países son un buen ejemplo de entidades
cátalogo.
Códigos Postales
Países
Información Paises
Regresar
Tipos de Datos
En las bases de datos existen varios tipos de datos que se pueden almacenar y manejar. Algunos de los tipos
de datos más comunes incluyen:
Números enteros: se utilizan para almacenar números enteros, como por ejemplo, edad, cantidad de productos, etc.
Números de punto flotante: se utilizan para almacenar números con decimales, como por ejemplo, precios,
coordenadas, etc.
Cadenas de texto: se utilizan para almacenar caracteres y texto, como por ejemplo, nombres, direcciones,
descripciones, etc.
Fechas y horas: se utilizan para almacenar fechas y horas, como por ejemplo, fechas de nacimiento, fechas de entrega,
etc.
Booleanos: se utilizan para almacenar valores verdaderos o falsos, como por ejemplo, si un usuario está activo o no.
Blobs y archivos: se utilizan para almacenar archivos grandes como imágenes, videos, audio, etc.
Datos geográficos: se utilizan para almacenar información geográfica, como por ejemplo, ubicación, direcciones, etc.
Estos son solo algunos ejemplos de los tipos de datos que se pueden almacenar y manejar en una base de
datos. El tipo de datos que utilices depende de las necesidades específicas de la aplicación y de la naturaleza
de los datos.
Regresar
CRUD
CRUD es un acrónimo que significa Create, Read Update & Delete, es decir: "Crear, Leer, Actualizar y
Eliminar".
Se refiere a las 4 operaciones básicas que se pueden realizar en una base de datos, es decir, la capacidad de
crear nuevos registros, leer, actualizar y eliminar los registros existentes.
Estas operaciones se consideran la funcionalidad básica que se espera de cualquier sistema de gestión de
bases de datos, y suelen estar implementadas de manera nativa en la mayoría de los SGBD.
Estas operaciones se utilizan tanto en la administración de objetos y privilegios de la base de datos como en
la gestión de los datos mismos.
Regresar
Lógica de Negocio
La lógica de negocios es el conjunto de reglas, políticas y procesos que describen cómo se lleva a cabo el
negocio.
En el modelado de una base de datos, la lógica de negocios se refiere a la representación de las reglas y
procesos de negocios en el modelo de datos.
Estas reglas y procesos incluyen cosas como la validación de los datos, la validación de las restricciones de
negocios, la definición de las relaciones entre las entidades, y la definición de cómo se deben calcular ciertos
valores.
También permite a los desarrolladores entender mejor cómo los datos se relacionan y se utilizan en un
sistema, lo que puede ser útil a la hora de realizar tareas de mantenimiento o mejora.
Además, la lógica de negocios puede ser reutilizada en diferentes partes de la aplicación, lo que reduce el
esfuerzo y el tiempo necesarios para implementar la misma lógica en múltiples lugares.
Regresar
Llaves
Una llave en bases de datos es un identificador que permite hacer único a un registro de información
tenemos 2 tipos: primarias y foráneas.
Llave Primaria
Identifica un registro como único dentro de la entidad a la que pertenece. En nuestro listado de atributos
pondremos las siglas PK de Primary Key delante del atributo que sea llave principal.
Llave Foránea
Relaciona los datos de un registro de una entidad con los de otra, o con un registro distinto de la misma
entidad. En nuestro listado de atributos pondremos las siglas FK de Foreign Key delante del atributo que
sea llave foránea.
Atributos Únicos
En algunas ocasiones vamos a necesitar que algunos atributos de la entidad sean únicos, es decir que no
existan datos duplicados en el atributo, sin que necesariamente sea una llave primaria o foránea.
Esta característica se utiliza a menudo para asegurarse de que los datos sean consistentes y no haya
duplicados en la entidad. Por ejemplo para que un usuario no pueda crear 2 cuentas diferentes con un mismo
correo o número de teléfono.
Datos que suelen definirse como atributos únicos podrían ser el DNI, email, teléfono móvil, nombre de
usuario o alias, número de placas de un automóvil, etc.
Regresar
Relaciones
Las relaciones son asociaciones entre entidades que se crean para recuperar y vincular datos.
Para crear una relación semánticamente utiliza un verbo para relacionar las entidades en cuestión.
Tipos de Relaciones
1 a 1: Una persona (e) poseé (r) una única clave de estudiante (e) y viceversa.
1 a M: Una factura (e) se emite (r) a una persona (e) y sólo a una, pero una persona (e) puede tener (r) varias
facturas (e) emitidas a su nombre.
M a M: Un cliente (e) puede comprar (r) varios productos (e) y un producto (e) puede ser comprado (r) por varios
clientes (e).
Regresar
Modelo Entidad-Relación
Un diagrama modelo entidad-relación es una herramienta para el modelo de datos, la cual facilita la
representación de entidades de una base de datos.
Se caracteriza por utilizar una serie de símbolos y reglas para representar los datos y sus relaciones. Con este
modelo conseguimos representar de manera gráfica la estructura lógica de una base de datos.
Las entidades se representan con rectángulos.
Los atributos se representan con óvalos que se conectan a la entidad a la que pertenecen.
Los atributos que son llaves primarias se subrayan.
Las relaciones se representan con rombos que conectan a las entidades relacionadas, dentro del rombo se coloca el
verbo que hace la relación entre las entidades.
Hay una variante a este diagrama, que se llama Modelo Relacional de la Base de Datos que también
ejemplifica gráficamente la relación de las entidades y la descripción de los atributos de estas.
Personalmente prefiero este tipo de diagrama por sobre el modelo entidad-relación, ya que nos permite
describir el tipo de dato de cada atributo y se vuelve más fácil de manejar al tener cada entidad en una tabla
con sus respectivos atributos.
Este tipo de diagramas lo puedes hacer con cualquier aplicación o software de diseño o diagramación, yo
uso Diagrams que es gratuita.
Regresar
Normalización
La normalización de bases de datos es un proceso que se utiliza para organizar y optimizar la estructura de
una base de datos para asegurar su integridad, evitar la redundancia y mejorar el rendimiento. La
normalización consiste en la división de las entidades en varias entidades más pequeñas y relacionarlas
mediante llaves foráneas.
La normalización se realiza a través de varios niveles o formas, cada uno de los cuales representa un grado
de descomposición de la entidad original. Los tres niveles más comunes de normalización son la Primera
Forma Normal (1FN), la Segunda Forma Normal (2FN) y la Tercera Forma Normal (3FN), aunque existen
otros 2 niveles.
Formas Normales
Las formas normales son estándares para la organización y modelamiento de datos en una base de datos
relacional. En total existen 5 formas normales.
1. Primera Forma Normal (1FN): Cada atributo de una entidad debe contener solo valores atómicos, es decir, valores
indivisibles que no pueden ser divididos en atributos más pequeños.
2. Segunda Forma Normal (2FN): Además de cumplir con la 1FN, cada atributo no dependiente funcionalmente de la llave
principal debe estar en una entidad separada.
3. Tercera Forma Normal (3FN): Además de cumplir con la 2FN, todas las dependencias funcionales deben ser eliminadas,
es decir, no deben existir dependencias funcionales transitorias.
4. Cuarta Forma Normal (4FN): También llamada de Forma Normal de Boyce-Codd (FNBC), es una forma más restrictiva
que la 3FN, donde se garantiza que no existan dependencias funcionales parciales o transitivas en la entidad.
5. Quinta Forma Normal (5FN): También conocida como Forma Normal de Domino-Clave (FNDC), en ella se debe
garantizar que no haya dependencias múltiples de conjuntos en las entidades.
Al aplicar las formas normales a un modelo de base de datos, se puede asegurar que los datos sean
consistentes, que no haya redundancia y que sea fácil de mantener y escalar.
Sin embargo, también es importante tener en cuenta que la aplicación de formas normales más rigurosas
puede resultar en una estructura de base de datos más compleja y menos eficiente en términos de
rendimiento. Por lo tanto, es importante encontrar un equilibrio entre la integridad de los datos y la
eficiencia en el diseño de un modelo de base de datos.
Primera Forma Normal: En la 1FN, cada columna de una tabla debe contener únicamente valores atómicos, es decir,
valores simples que no pueden ser divididos en partes más pequeñas.
Segunda Forma Normal: La 2FN requiere que cada columna no dependiente funcionalmente de la clave primaria de
una tabla sea movida a una tabla separada. Esto significa que cada tabla debe representar un solo hecho o concepto.
Tercera Forma Normal: La 3FN requiere que todas las dependencias funcionales sean removidas de la tabla, es decir,
que no haya redundancia de información.
Forma Normal de Boyce-Codd: La FNBC es una forma normal más rigurosa que la anteriores y requiere que cada
dependencia funcional sea una clave candidata única.
Forma Normal de Dominio-Clave: Esta forma normal (FNDC) es una extensiones de la FNBC y se utiliza para asegurar la
integridad de los datos en modelos de datos más complejos. No debe haber dependencias funcionales múltiples, es
decir, una dependencia funcional en la que varios atributos dependen de una clave externa.
Tenemos una entidad desnormalizada de "Ventas" de una tienda con la siguiente información:
Por lo tanto, podemos crear una entidad separada llamada "Clientes" que almacene estos datos y en la
entidad principal "Ventas" agregamos la llave foránea que haga referencia al cliente.
En este caso, la entidad "Ventas" ya está en la segunda forma normal, así que podemos continuar con la
eliminación de dependencias transitivas.
La entidad "Ventas" depende transitoriamente del "Producto" a través de "Precio". Por lo tanto, debemos
crear una entidad adicional para los "Productos" que incluya la información de estos.
Finalmente la quinta forma normal (Dominio-Clave) exige eliminar cualquier dependencia funcional
múltiple, pero en este modelo no existen por lo que también cumple con esta última forma normal.
Modelado de Datos
1. Identificar las entidades del sistema.
2. Identificar los atributos de las entidades.
3. Identificar las llaves primarias y foráneas.
4. Asignar una nomenclatura adeacuada a las entidades y sus atributos.
5. Identificar las entidades pivote del sistema.
6. Identificar los catálogos del sistema.
7. Identificar los tipos de relaciones del sistema.
8. Crear el Modelo Entidad-Relación del sistema.
9. Crear el Modelo Relacional de la base de datos del sistema.
10. Identificar los tipos de dato de los atributos de las entidades del sistema.
11. Identificar los atributos que puedan ser únicos en el sistema.
12. Identificar las reglas de negocio (Operaciones CRUD) del sistema.
Regresar
SQL
Última actualización: May 01 2023
Temas
Introducción
Tipos de SGBDs
Tipos de Datos
Tipos de Sentencias SQL
Comandos y Funciones SQL
Sintaxis SQL Básica
Gestionando Bases de Datos
Usuarios y Privilegios
Gestionando Tablas
CRUD de Datos
Sentencias de Agrupamiento
Sintaxis SQL Avanzada
Índices
Foreign Keys
JOINs
Subconsultas
Vistas
Motores de Tablas
Restricciones
Transacciones
Encriptación
Procedimientos Almacenados
Disparadores
Aprende más
Introducción
SQL significa Structured Query Language, es un lenguaje de programación que se utiliza para manejar bases
de datos relacionales. SQL se utiliza para crear, modificar y consultar bases de datos y tablas, insertar y
actualizar registros, borrar y eliminar datos, y realizar otras operaciones relacionadas con la gestión de datos.
SQL es un estándar de facto en el mundo de las bases de datos relacionales, lo que significa que se utiliza en
la mayoría de los sistemas de bases de datos relacionales y que es compatible con diferentes sistemas y
plataformas. También es un lenguaje fácil de aprender y muy utilizado en el mundo empresarial.
Los inicios de SQL se remonta a la década de 1970, cuando un equipo de investigadores de IBM liderado
por Donald D. Chamberlin y Raymond F. Boyce creó el lenguaje de programación SEQUEL (Structured
English Query Language) para gestionar datos en sistemas de bases de datos relacionales.
SEQUEL se convirtió en SQL cuando se desarrolló el sistema de gestión de bases de datos relacionales
(RDBMS) llamado System R de IBM.
En la década de 1980, la empresa Oracle Corporation también comenzó a utilizar SQL en su sistema de
bases de datos relacionales Oracle Database. A medida que los sistemas de bases de datos relacionales se
hicieron más populares, SQL se convirtió en el estándar de facto para interactuar con ellos.
En la década de 1990, SQL se convirtió en un estándar ANSI y se añadieron características más avanzadas,
como consultas complejas con múltiples tablas y subconsultas. A lo largo de las décadas siguientes, SQL
continuó evolucionando y añadiendo nuevas características, como funciones de agregación, procedimientos
almacenados y desencadenadores.
Hoy en día, SQL es el lenguaje de programación más utilizado en el mundo de las bases de datos
relacionales, y es una habilidad esencial para aquellos que trabajan en campos como la programación, la
gestión de datos y la inteligencia empresarial.
Regresar
Tipos de SGBDs
Estos son algunos ejemplos de sistemas de gestión de bases de datos basados en SQL, más populares.
1. MySQL: es un sistema de gestión de bases de datos relacional de código abierto desarrollado por Oracle. Es uno de los
sistemas de bases de datos más populares y ampliamente utilizados en el mundo.
2. PostgreSQL: es otro sistema de gestión de bases de datos relacional de código abierto, que se enfoca en la conformidad
con los estándares y la extensibilidad. Es conocido por su capacidad para manejar grandes volúmenes de datos y su
soporte para funciones avanzadas como la replicación y la georreferenciación.
3. Microsoft SQL Server: es un sistema de gestión de bases de datos relacional desarrollado por Microsoft. Se utiliza
principalmente en entornos empresariales y es compatible con una amplia variedad de aplicaciones de software
de Microsoft.
4. Oracle Database: es un sistema de gestión de bases de datos relacional desarrollado por Oracle. Es uno de los sistemas
de bases de datos más antiguos y ampliamente utilizados en el mundo empresarial, y se utiliza principalmente en
grandes empresas y organizaciones gubernamentales.
5. SQLite: es un sistema de gestión de bases de datos relacional ligero que se utiliza principalmente en aplicaciones
móviles y de escritorio. Es conocido por su facilidad de uso y su capacidad para manejar pequeñas bases de datos.
6. MariaDB: es un sistema de gestión de bases de datos de código abierto basado en el lenguaje SQL. Fue creado como
un fork de MySQL en 2009, después de que la empresa matriz de MySQL, Sun Microsystems, fuera adquirida por Oracle
Corporation. El objetivo principal de la creación de MariaDB era proporcionar una alternativa de código abierto
a MySQL y asegurar la continuidad del desarrollo.
Regresar
Tipos de Datos
Tipo Descripción
VARCHAR Cadena de texto variable, con una longitud máxima especificada.
CHAR Cadena de texto fija, con una longitud específica.
INT Número entero, positivo o negativo.
BIGINT Número entero grande, positivo o negativo.
FLOAT Número decimal de precisión simple.
DOUBLE Número decimal de doble precisión.
DECIMAL Número decimal con precisión fija.
DATE Fecha, con valores de año, mes y día.
TIME Hora, con valores de hora, minutos y segundos.
DATETIME Fecha y hora combinadas.
TIMESTAMP Marca de tiempo, que indica un momento específico en el tiempo.
BOOLEAN Valor booleano, verdadero o falso.
BLOB Objeto binario grande, para almacenar datos binarios, como imágenes o archivos.
JSON Formato de texto estructurado para el intercambio de datos.
Regresar
1. Sentencias DDL (Data Definition Language): se utilizan para definir y modificar la estructura de la base de datos. Por
ejemplo para crear o modificar la estructura de una tabla.
2. Sentencias DML (Data Manipulation Language): se utilizan para manipular los datos dentro de la base de datos. Por
ejemplo las instrucciones del CRUD de datos (INSERT, SELECT, UPDTE y DELETE).
3. Sentencias DCL (Data Control Language): se utilizan para controlar el acceso a la base de datos y garantizar la seguridad.
Por ejemplo para otorgar permisos a los usuarios para acceder a las bases de datos.
4. Sentencias TCL (Transaction Control Language): se utilizan para controlar las transacciones en una base de datos.
Estos son solo algunos ejemplos de los tipos de sentencias en SQL. Es importante tener en cuenta que
diferentes sistemas de bases de datos pueden tener variaciones en las sentencias específicas que se utilizan,
pero los conceptos básicos de los tipos de sentencias generalmente se aplican a la mayoría de los sistemas de
bases de datos relacionales.
Regresar
Comandos SQL
Comando Descripción
SELECT Recupera datos de una o varias tablas. Es una de las sentencias más comunes en SQL.
INSERT Agrega nuevos datos a una tabla.
Comando Descripción
UPDATE Actualiza los datos existentes en una tabla.
DELETE Elimina datos de una tabla.
CREATE Crea una nueva tabla, vista, índice, procedimiento almacenado u otra estructura de ba
ALTER Modifica la estructura de una tabla existente, como agregar o eliminar columnas.
DROP Elimina una tabla, vista, índice, procedimiento almacenado u otra estructura de base
Concede permisos a un usuario o grupo de usuarios para realizar operaciones en una ta
GRANT
general.
REVOKE Retira los permisos previamente otorgados a un usuario o grupo de usuarios.
JOIN Combina datos de dos o más tablas en función de una columna común.
UNION Combina los resultados de dos o más consultas en una sola tabla.
GROUP
Agrupa los resultados de una consulta en función de una o más columnas.
BY
HAVING Permite filtrar los resultados de una consulta agrupada.
ORDER
Ordena los resultados de una consulta en función de una o más columnas.
BY
LIMIT Limita el número de filas devueltas por una consulta.
Funciones SQL
Función Descripción
AVG() Devuelve el valor promedio de una columna numérica.
COUNT() Cuenta el número de filas o valores distintos en una columna.
MAX() Devuelve el valor máximo de una columna.
MIN() Devuelve el valor mínimo de una columna.
SUM() Devuelve la suma de los valores de una columna numérica.
CONCAT() Concatena dos o más cadenas de texto.
SUBSTRING() Devuelve una parte de una cadena de texto.
UPPER() Convierte una cadena de texto a mayúsculas.
LOWER() Convierte una cadena de texto a minúsculas.
LEFT() Devuelve los caracteres iniciales de una cadena de texto.
RIGHT() Devuelve los caracteres finales de una cadena de texto.
DATE() Extrae la fecha de un valor de fecha y hora.
YEAR() Devuelve el año de una fecha.
MONTH() Devuelve el mes de una fecha.
DAY() Devuelve el día de una fecha.
ROUND() Redondea un valor numérico al número de decimales especificado.
Regresar
Buenas prácticas
Regresar
SHOW DATABASES;
USE nombre_base;
Regresar
Usuarios y Privilegios
FLUSH PRIVILEGES;
SHOW TABLES;
DESCRIBE nombre_tabla;
campo2 TIPO_DATO);
CRUD de Datos
Create - INSERT.
Read - SELECT.
Update - UPDATE.
Delete - DELETE.
CREATE
Insertar un registro:
...,
READ
SELECT * FROM tabla WHERE campo_1 LIKE '%valor_1';SELECT * FROM tabla WHERE
campo_1 LIKE 'valor_1%';SELECT * FROM tabla WHERE campo_1 LIKE '%valor_1%';
Leer un registro en particular buscando el valor con operadores lógicos:
UPDATE
UPDATE tabla
DELETE
Sentencias de Agrupamiento
GROUP BY
La cláusula GROUP BY se utiliza para agrupar los registros en una consulta basándose en una o más
columnas.
FROM ventas
GROUP BY producto;
Esta consulta agrupa los registros de la tabla "Ventas" por la columna "producto" y calcula la suma total de
la columna "cantidad" para cada producto. El resultado sería el siguiente:
producto total_vendido
Zapatos 7
Camisas 10
Pantalón 4
Como puedes ver, la cláusula GROUP BY es muy útil para realizar operaciones de agregación, como contar,
sumar o promediar valores, en diferentes grupos de registros.
Regresar
HAVING
La cláusula HAVING se utiliza en SQL para filtrar los resultados de una consulta que utiliza la
cláusula GROUP BY.
Supongamos que tenemos una tabla llamada "Ventas" que contiene información sobre las ventas de una
empresa:
FROM ventas
GROUP BY producto;
Esta consulta devuelve el siguiente resultado:
producto total_ventas
A 15
B 23
C 32
Ahora, supongamos que queremos obtener solamente los productos que han tenido un total de ventas mayor
a 20. Para ello, podemos utilizar la cláusula HAVING de la siguiente manera:
FROM ventas
GROUP BY producto
producto total_ventas
B 23
C 32
Como puedes ver, la cláusula HAVING nos permite filtrar los resultados de una consulta que utiliza GROUP
BY, basándonos en una condición que se aplica a los resultados agrupados. En este caso, hemos filtrado los
productos que han tenido un total de ventas mayor a 20.
Regresar
DISTINCT
La cláusula DISTINCT se utiliza en SQL para eliminar las filas duplicadas de un conjunto de resultados.
id nombre apellido
1 Juan Perez
2 Ana Garcia
3 Juan Martinez
4 Maria Rodriguez
5 Ana Jimenez
Si queremos obtener la lista de nombres únicos de los clientes, podemos utilizar la cláusula DISTINCT de la
siguiente manera:
FROM Clientes;
Esta consulta devuelve los nombres únicos de los clientes de la tabla "Clientes", sin importar si tienen
apellidos diferentes. El resultado sería el siguiente:
nombre
Juan
Ana
Maria
Como puedes ver, la cláusula DISTINCT nos permite obtener resultados únicos y reducir la cantidad de
datos redundantes en las consultas SQL.
Regresar
ORDER BY
La cláusula ORDER BY en SQL se utiliza para ordenar los resultados de una consulta en un orden específico.
Se puede ordenar por una o varias columnas y en orden ascendente (ASC) o descendente (DESC).
Por ejemplo, si tenemos una tabla "empleados" con las columnas "nombre", "apellido" y "salario", podemos
ordenar los registros por el salario de forma ascendente con la siguiente consulta:
Regresar
LIMIT
La cláusula LIMIT se utiliza en SQL para limitar el número de resultados devueltos en una consulta. Permite
especificar el número de filas que se deben recuperar desde la tabla, lo que puede ser útil en consultas que
devuelven grandes cantidades de datos.
FROM tabla
LIMIT cantidad_de_filas;
Donde cantidad_de_filas es el número máximo de filas que se deben devolver en la consulta.
También es posible especificar un punto de inicio desde el cual se deben recuperar las filas, lo que se logra
utilizando dos valores separados por una coma. El primer valor especifica el índice de la primera fila que se
debe devolver, y el segundo valor especifica el número máximo de filas que se deben devolver.
FROM tabla
Por ejemplo, la siguiente consulta devuelve los primeros 10 registros de la tabla "clientes":
LIMIT 10;
Y la siguiente consulta devuelve los registros 11 al 20 de la tabla "clientes":
Regresar
Índice único (UNIQUE): asegura que los valores de la columna indexada sean únicos en la tabla.
Índice primario (PRIMARY KEY): es un tipo especial de índice único que identifica de forma única cada fila de una tabla.
Índice secundario (INDEX): es un índice que no tiene restricciones de unicidad y se utiliza para mejorar el rendimiento
de consultas que involucran la columna indexada.
Índice de texto completo (FULLTEXT): se utiliza para hacer búsquedas de texto completo en columnas de texto grandes,
como VARCHAR y TEXT.
Ejemplo
campo_index VARCHAR(80),
campo_3 VARCHAR(80),
campo_4 VARCHAR(80),
INDEX i_campo_index(campo_index)
Foreign Keys
En SQL, una llave foránea (Foreign Key) es un campo o conjunto de campos en una tabla que hacen
referencia a una clave única en otra tabla, estableciendo así una relación entre ambas tablas. Se utilizan para
mantener la integridad referencial de los datos, lo que significa que garantizan que los datos en las tablas
relacionadas sean coherentes y precisos.
Sintaxis
Ejemplo
JOINS
Los JOINs en SQL sirven para combinar filas de dos o más tablas basándose en un campo común entre ellas,
devolviendo por tanto datos de diferentes tablas. Un JOIN se produce cuando dos o más tablas se juntan en
una sentencia SQL.
INNER JOIN: Devuelve todas las filas cuando hay al menos una coincidencia en ambas tablas.
LEFT JOIN: Devuelve todas las filas de la tabla de la izquierda, y las filas coincidentes de la tabla de la derecha.
RIGHT JOIN: Devuelve todas las filas de la tabla de la derecha, y las filas coincidentes de la tabla de la izquierda.
OUTER JOIN: Devuelve todas las filas de las dos tablas, la izquierda y la derecha, también se llama FULL OUTER JOIN.
SELECT * FROM tabla_1 AS t1
ON t1.a_campo = t2.a_campo;
FROM tabla_1 AS t1
ON t1.campo_1 = t2.campo_5
FROM tabla_1 AS t1
ON t1.campo_1 = t2.campo_4
Subconsultas
SELECT COUNT(*)
FROM tabla_2 AS t2
) AS sub_consulta_campo
SELECT campo_1
FROM tabla_2 AS t2
) AS sub_consulta_campo
Vistas
Una vista es una tabla virtual que se deriva de una o más tablas existentes en una base de datos. En otras
palabras, una vista no almacena datos físicamente, sino que es una consulta predefinida que se ejecuta cada
vez que se accede a ella.
La vista se define utilizando una consulta SELECT, y una vez definida, puede ser tratada como cualquier
otra tabla en la base de datos, permitiendo que se realicen consultas, actualizaciones y eliminaciones de
registros.
Las vistas son útiles porque pueden proporcionar una capa adicional de abstracción para los usuarios que no
necesitan conocer los detalles de la estructura de la base de datos subyacente.
Por ejemplo, se puede crear una vista que presente solo ciertas columnas de una tabla, o que filtre los
registros en función de ciertos criterios.
Además, las vistas pueden ser utilizadas para simplificar consultas complejas, ya que una vista puede
contener una consulta que combine datos de varias tablas. En lugar de tener que escribir la consulta
completa cada vez, los usuarios pueden simplemente consultar la vista.
Motores de Tablas
Un motor de tablas (también conocido como motor de almacenamiento) en SQL es el componente del
sistema de gestión de bases de datos (SGBD) que se encarga de la forma en que se almacenan, recuperan y
manipulan los datos en una base de datos.
Los motores de tablas son responsables de la forma en que se organizan los datos físicamente en el disco, así
como de cómo se accede a ellos y se realiza el mantenimiento de la base de datos.
Cada motor de tablas tiene su propia forma de gestionar las tablas, los índices, los bloqueos, las
transacciones y la concurrencia. Algunos motores de tablas son más adecuados para aplicaciones de alta
concurrencia y transacciones complejas, mientras que otros son más adecuados para aplicaciones con menos
concurrencia y consultas más simples.
En MySQL, por ejemplo, existen varios motores de tablas disponibles, cada uno con sus propias
características y limitaciones. Los motores de tablas más comunes
son InnoDB, MyISAM, MEMORY, CSV y ARCHIVE.
MyISAM es un motor de almacenamiento antiguo que ya no se recomienda su uso debido a sus limitaciones
en cuanto a la integridad referencial y la seguridad de los datos.
Los otros motores de tablas en MySQL tienen características específicas, como la capacidad de almacenar
datos en memoria, acceder a datos en archivos CSV o comprimir datos.
Ejemplo
Restricciones
En SQL, las restricciones ON DELETE y ON UPDATE se utilizan para especificar qué acciones se deben
realizar en una tabla relacionada cuando se realiza una operación de eliminación o actualización en la tabla
principal.
Las acciones que se pueden especificar para las restricciones ON DELETE y ON UPDATE son:
Ejemplo
REFERENCES lenguajes(lenguaje_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
REFERENCES entornos(entorno_id)
ON DELETE RESTRICT
ON UPDATE CASCADE);
Regresar
Transacciones
En SQL, una transacción es una secuencia de operaciones que se ejecutan como una sola unidad lógica e
indivisible, como si fueran una única operación. Una transacción garantiza la integridad de los datos y la
consistencia de la base de datos en caso de errores o fallas.
Una transacción típica implica una serie de operaciones que se realizan en una base de datos, como agregar,
modificar o eliminar registros en una o más tablas.
Todas las operaciones de la transacción se realizan como una sola unidad, lo que significa que todas las
operaciones deben completarse con éxito o ninguna de ellas debe ser efectiva.
Para iniciar una transacción en SQL, se utiliza la sentencia START TRANSACTION. Luego, se realizan las
operaciones de la transacción, y si todas ellas se ejecutan correctamente, se utiliza la
sentencia COMMIT para confirmar los cambios en la base de datos.
START TRANSACTION;
COMMIT;
START TRANSACTION;
ROLLBACK;
Encriptación
En SQL existen varias funciones de encriptación que se pueden utilizar para proteger la información sensible
en las bases de datos.
MD5
Esta función convierte una cadena de caracteres en un valor hash de 128 bits. El valor resultante es único
para cada cadena de entrada y se utiliza comúnmente para almacenar contraseñas en la base de datos.
SELECT MD5('password');
SHA1
Esta función también genera un valor hash, pero utiliza un algoritmo más seguro que MD5 y produce un
valor hash de 160 bits.
SELECT SHA1('password');
SHA2
Esta función es similar a SHA1, pero permite especificar la longitud del valor hash generado (en bits). Se
puede utilizar para crear valores hash más largos y más seguros que SHA1.
SELECT SHA2('password', 256);
AES_ENCRYPT y AES_DECRYPT
Estas funciones se utilizan para encriptar y desencriptar datos utilizando el algoritmo AES.
AES_DECRYPT('encrypted_value', 'secret_key');
Es importante tener en cuenta que la encriptación no es una solución completa para la seguridad de la base
de datos y se deben tomar otras medidas de seguridad para proteger la información sensible.
Ejemplo
tarjeta BLOB);
FROM pagos_recurrentes;
FROM pagos_recurrentes;
Regresar
Procedimientos Almacenados
Los procedimientos almacenados también pueden ser utilizados para encapsular lógica de negocio y reducir
la complejidad de las aplicaciones cliente al mover la lógica de la base de datos al servidor.
Sintaxis
DELIMITER //
IN valor_entrada TIPO_DATO,
IN valor_entrada_2 TIPO_DATO,
BEGIN
Código del Procedimiento Almacenado
END //
DELIMITER ;
Una vez creado el procedimiento almacenado, podemos llamarlo con el siguiente código:
CALL nombre_procedimiento();
Eliminar un procedimiento y mostrar los procedimientos de una base de datos:
Ejemplo
tarjeta BLOB,
REFERENCES clientes(cliente_id)
ON DELETE RESTRICT
ON UPDATE CASCADE);
FOREIGN KEY(cliente)
REFERENCES clientes(cliente_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY(tarjeta)
REFERENCES tarjetas(tarjeta_id)
ON DELETE RESTRICT
ON UPDATE CASCADE,
FOREIGN KEY(suscripcion)
REFERENCES suscripciones(suscripcion_id)
ON DELETE RESTRICT
ON UPDATE CASCADE);
Ahora el código del procedimiento:
IN i_nombre VARCHAR(30),
IN i_correo VARCHAR(50),
IN i_tarjeta VARCHAR(16),
BEGIN
START TRANSACTION;
FROM clientes
ELSE
END IF;
COMMIT;
END //
DELIMITER ;
Finalmente lo ejecutamos y vemos el resultado de la variable de respuesta y en las correspondientes tablas la
inserción de datos:
Disparadores
Un disparador o Trigger es un objeto que se utiliza para ejecutar automáticamente una acción en respuesta a
ciertos eventos en una base de datos, como INSERT, UPDATE o DELETE en una tabla específica.
Los disparadores se pueden utilizar para asegurarse de que ciertas acciones se realicen automáticamente
después de que se realice un cambio en una tabla, o para evitar que se realicen ciertas acciones.
Por ejemplo, un disparador se puede utilizar para actualizar automáticamente una tabla de resumen después
de que se realice un cambio en una tabla de detalles, o para evitar que se elimine un registro importante de
una tabla.
Sintaxis
ON nombre_tabla
FOR EACH ROW
BEGIN
Código del Disparador
END //
DELIMITER ;
Eliminar un disparador y mostrar los disparadores de una base de datos:
Ejemplo
Para el ejemplo de este disparador, seguiremos usando el código de ejemplo de los procedimeintos
almacenados, primero creamos una tabla donde se almacene el resultado de nuestro disparador:
fecha DATETIME,
REFERENCES clientes(cliente_id)
ON DELETE RESTRICT
ON UPDATE CASCADE);
Ahora creamos nuestro disparador:
AFTER INSERT
ON clientes
BEGIN
DELIMITER ;
Finalmente ejecutamos nuevamente el ejemplo del procedimiento almacenado y en cuanto se haga
el INSERT a la tabla "clientes", el disparador se lanzará automáticamente.
NoSQL
Temas
Introducción
Bases de datos NoSQL
Bases de llave-valor
Bases orientadas a columnas
Bases orientadas a grafos
Bases orientadas a documentos
Aprende más
Introducción
¿Qué es NoSQL?
NoSQL (Not Only SQL) es un término que se utiliza para describir un conjunto de sistemas de gestión de
bases de datos que utilizan modelos de datos no relacionales, en contraposición a los sistemas de gestión de
bases de datos relacionales (RDBMS) tradicionales.
Los sistemas NoSQL están diseñados para manejar grandes cantidades de datos no estructurados o
semiestructurados de manera eficiente y escalable.
A diferencia de las bases de datos relacionales, que utilizan tablas con filas y columnas, los
sistemas NoSQL utilizan diferentes modelos de datos, como bases de datos de documentos, de grafos, de
llave-valor y de columnas.
Estos modelos de datos permiten una mayor flexibilidad y escalabilidad en la gestión de grandes cantidades
de datos y en el soporte de cargas de trabajo distribuidas y en tiempo real.
Entre las ventajas de las bases de datos NoSQL se encuentran la alta disponibilidad, la escalabilidad
horizontal, la facilidad de uso, la flexibilidad en el esquema de datos y la capacidad de manejar grandes
volúmenes de datos. Sin embargo, también existen algunas desventajas, como la falta de estándares, la falta
de soporte para algunas operaciones complejas, la dificultad para realizar consultas complejas y la necesidad
de más experiencia técnica para manejar estas bases de datos en comparación con las bases de datos
relacionales.
Escalabilidad: Están diseñados para ser escalables, lo que significa que pueden manejar grandes cantidades de datos y
tráfico sin degradar el rendimiento. Esto los hace ideales para aplicaciones web y móviles de alta demanda, donde se
necesita una rápida escalabilidad.
Flexibilidad en el modelo de datos: Proporcionan una mayor flexibilidad en el diseño de los datos en comparación con
las bases de datos relacionales. Esto se debe a que los modelos de datos NoSQL no están basados en tablas y relaciones,
lo que significa que se pueden agregar o modificar datos en cualquier momento sin necesidad de modificar el esquema
de la base de datos.
Velocidad: Están diseñados para ofrecer un alto rendimiento, lo que significa que pueden manejar grandes cantidades
de datos de forma rápida y eficiente. Esto se logra mediante la eliminación de restricciones y la utilización de técnicas
de optimización de consultas.
Disponibilidad: Están diseñados para proporcionar alta disponibilidad y tolerancia a fallos. Esto se logra mediante la
replicación de los datos en múltiples servidores, lo que significa que si uno de los servidores falla, los datos todavía
estarán disponibles en otro servidor.
Big Data: Con el aumento en la cantidad de datos que se generan diariamente, la gestión y el procesamiento de
grandes volúmenes de datos se ha vuelto más crítico. Los sistemas NoSQL son ideales para manejar grandes cantidades
de datos no estructurados y semi-estructurados que no se ajustan a un esquema de base de datos tradicional.
En resumen, NoSQL es importante porque ofrece una mayor escalabilidad, flexibilidad, velocidad,
disponibilidad y es capaz de manejar grandes volúmenes de datos no estructurados. Todo esto hace que sea
una herramienta esencial para cualquier empresa que necesite manejar grandes cantidades de datos en
tiempo real y con un alto rendimiento.
NoSQL es una buena opción cuando se necesita manejar grandes cantidades de datos no estructurados o
semi-estructurados, o cuando se requiere una alta escalabilidad, disponibilidad y rendimiento. Por ejemplo:
Big Data: Cuando se manejan grandes volúmenes de datos, como en el caso de las redes sociales, los
sistemas NoSQL son ideales para manejar este tipo de datos no estructurados.
Carga de trabajo distribuida: Cuando se necesita manejar una carga de trabajo distribuida, como en el caso de las
aplicaciones web y móviles de alta demanda, los sistemas NoSQL son capaces de escalar horizontalmente, lo que
significa que se pueden agregar más servidores a medida que aumenta la demanda.
Flexibilidad en el esquema de datos: Cuando se necesita una mayor flexibilidad en el diseño de los datos, como en el
caso de las aplicaciones que requieren una evolución rápida, los sistemas NoSQL permiten agregar o modificar datos en
cualquier momento sin necesidad de modificar el esquema de la base de datos.
Alta disponibilidad y tolerancia a fallos: Cuando se necesita una alta disponibilidad y tolerancia a fallos, como en el
caso de las aplicaciones críticas, los sistemas NoSQL proporcionan replicación de datos y una mayor resistencia a los
fallos de hardware y software.
Análisis en tiempo real: Cuando se necesita procesar grandes cantidades de datos en tiempo real, como en el caso de
la detección de fraudes, los sistemas NoSQL son capaces de procesar grandes volúmenes de datos en tiempo real.
Historia y evolución de NoSQL
La historia y evolución de NoSQL comienza en el año 1998 con la creación de la base de datos open-
source "mSQL", que fue el precursor de MySQL.
A pesar de que MySQL se convirtió en una base de datos muy popular, su enfoque en las relaciones entre
tablas y la necesidad de esquemas rígidos limitaba su capacidad para manejar grandes volúmenes de datos
no estructurados.
A mediados de la década de 2000, la web y las aplicaciones móviles comenzaron a generar grandes
volúmenes de datos no estructurados, lo que llevó a la necesidad de bases de datos que pudieran manejar
este tipo de datos. En 2007, Google presentó un artículo sobre su sistema de base de datos distribuida
"Bigtable", que se basaba en un modelo de datos de columnas y filas en lugar de tablas y
relaciones. Bigtable fue la inspiración para muchas de las primeras bases de datos NoSQL.
En 2009, el término "NoSQL" fue acuñado por Johan Oskarsson para describir una nueva generación de
bases de datos que no utilizaban SQL como lenguaje de consulta y que se basaban en modelos de datos no
relacionales. Ese mismo año, MongoDB lanzó su primera versión y se convirtió en uno de los
sistemas NoSQL más populares.
Las bases de datos NoSQL tienen ventajas y desventajas en comparación con las bases de datos relacionales
tradicionales.
Ventajas:
Escalabilidad horizontal: Están diseñadas para escalar horizontalmente, lo que significa que se pueden agregar más
servidores para aumentar la capacidad de almacenamiento y procesamiento a medida que aumenta la demanda.
Flexibilidad de esquema: No tienen esquemas fijos, lo que significa que pueden manejar diferentes tipos de datos sin
tener que ajustar un esquema de tabla existente.
Rendimiento: Son capaces de procesar grandes cantidades de datos con alta velocidad y eficiencia.
Alta disponibilidad y tolerancia a fallos: Suelen estar diseñadas para proporcionar alta disponibilidad y tolerancia a
fallos, lo que significa que pueden continuar funcionando incluso si un servidor o nodo falla.
Costo: Suelen ser menos costosas que las bases de datos relacionales tradicionales, especialmente para grandes
volúmenes de datos.
Desventajas:
Falta de estandarización: Al ser un conjunto diverso de tecnologías, carecen de una estandarización clara, lo que puede
dificultar la interoperabilidad y la migración de datos entre sistemas.
Menos madurez: Algunos sistemas NoSQL aún no tienen la madurez de las bases de datos relacionales tradicionales, lo
que puede significar una menor estabilidad y soporte.
Menos herramientas y habilidades disponibles: Tienen menos herramientas y habilidades disponibles en comparación
con las bases de datos relacionales, lo que puede dificultar su implementación y mantenimiento.
Limitaciones en la capacidad de consulta: No tienen una funcionalidad de consulta tan avanzada como las bases de
datos relacionales, lo que puede dificultar la recuperación y el análisis de datos.
En resumen, las bases de datos NoSQL son una opción atractiva para manejar grandes volúmenes de datos
no estructurados, pero también presentan algunas desventajas como la falta de estandarización y la
limitación en la capacidad de consulta. Cada proyecto y caso de uso debe evaluarse cuidadosamente para
determinar si NoSQL es la opción correcta.
Regresar
A continuación, te presento algunos de los tipos de bases de datos NoSQL más comunes:
1. Bases de datos de llave-valor: Almacenan datos como pares de llave-valor, donde la llave es un identificador único para
el valor asociado. Este tipo de bases de datos es útil para almacenar y recuperar datos simples y muy rápidos. Ejemplo
de estas bases de datos son: Redis, Riak, Amazon DynamoDB, etc.
2. Bases de datos de columnas: Almacenan datos en columnas, en lugar de filas como en las bases de datos relacionales
tradicionales. Este enfoque permite la escalabilidad horizontal y es especialmente útil para conjuntos de datos con
muchos campos y poca variabilidad en los datos. Ejemplo de estas bases de datos son: Apache Cassandra, HBase, etc.
3. Bases de datos de grafos: Almacenan datos como nodos y relaciones entre ellos, lo que los hace útiles para análisis de
redes y relaciones complejas. Ejemplo de estas bases de datos son: Neo4j, OrientDB, ArangoDB, etc.
4. Bases de datos de documentos: Almacenan datos en documentos JSON u otros formatos de documentos. Cada
documento es una entidad completa que incluye todos los datos necesarios para esa entidad, lo que significa que los
datos relacionados no necesitan estar divididos en diferentes tablas o colecciones. Ejemplo de estas bases de datos
son: MongoDB, CouchDB, Apache Couchbase, etc.
Regresar
Bases de llave-valor
Las bases de datos de llave-valor son un tipo de bases de datos NoSQL que almacenan y recuperan datos
utilizando un modelo simple de pares de "llave-valor". Cada dato en la base de datos se guarda como un par,
donde la "llave" es un identificador único que se utiliza para recuperar el "valor" asociado.
En este modelo, los datos se organizan en una estructura simple y plana, sin relaciones complejas ni
jerarquías. Esto hace que las bases de datos de llave-valor sean muy eficientes en términos de rendimiento y
escalabilidad. Al no tener esquemas fijos, permiten la flexibilidad en la forma en que se almacenan los datos.
1. Inserción: Se inserta un nuevo par de llave-valor en la base de datos. La llave debe ser única y el valor puede ser
cualquier tipo de dato, como una cadena de texto, un número, un objeto JSON, entre otros.
2. Actualización: Se actualiza el valor asociado a una llave existente en la base de datos.
3. Eliminación: Se elimina un par de llave-valor de la base de datos.
4. Recuperación: Se recupera el valor asociado a una llave específica.
Las bases de datos de llave-valor son especialmente útiles en casos de uso donde la velocidad y la
simplicidad son prioritarias, como en aplicaciones de caché, sistemas de sesión, almacenamiento de
metadatos, sistemas de colas, entre otros. Su diseño simple y su alto rendimiento las hacen ideales para
escenarios que requieren un acceso rápido a los datos.
Algunos ejemplos de bases de datos de llave-valor populares son Redis, Riak y Amazon DynamoDB. Cada
una tiene sus propias características y funcionalidades, pero todas comparten la simplicidad y eficiencia del
modelo de llave-valor.
Redis
Redis es una base de datos de alto rendimiento y almacenamiento en caché en memoria que se utiliza
ampliamente en aplicaciones web y sistemas distribuidos. Su nombre es una abreviatura de "REmote
DIctionary Server" (Servidor de Diccionario Remoto), y se caracteriza por su capacidad para almacenar
datos en una estructura de datos de llave-valor en memoria.
Principales características:
1. Almacenamiento en memoria: almacena todos los datos en la memoria principal, lo que le permite ofrecer un acceso
extremadamente rápido a los datos. Esto lo convierte en una opción ideal para aplicaciones donde la latencia es crítica.
2. Modelos de datos versátiles: admite una variedad de estructuras de datos, como cadenas de texto, listas,
conjuntos, hash, conjuntos ordenados y bitmaps. Esto permite una mayor flexibilidad en el almacenamiento y
manipulación de datos según las necesidades específicas de la aplicación.
3. Operaciones atómicas: proporciona operaciones atómicas en las estructuras de datos, lo que garantiza que una
operación se ejecute en su totalidad sin intervención de otras operaciones concurrentes. Esto es útil para casos donde
se requiere consistencia y seguridad en las operaciones.
4. Persistencia opcional: Aunque almacena los datos en memoria, también proporciona opciones de persistencia en disco,
lo que permite que los datos se mantengan incluso después de un reinicio del servidor. Esto se logra mediante la
escritura de los datos en disco en forma de snapshots o mediante el uso de registros de transacciones.
5. Capacidades avanzadas: ofrece una variedad de características avanzadas, como la capacidad de publicar y suscribir a
canales de mensajes, realizar operaciones de bloqueo para garantizar la exclusión mutua, soporte
para scripts Lua personalizados y la posibilidad de configurar clústeres para alta disponibilidad y escalabilidad.
Redis se utiliza ampliamente en aplicaciones que requieren una alta velocidad de acceso a datos, como
almacenamiento en caché, gestión de sesiones de usuario, conteo de visitas, colas de mensajes, análisis en
tiempo real y más. Además, es altamente extensible y cuenta con una comunidad activa que contribuye con
módulos y herramientas adicionales.
Espero que esta introducción te haya dado una visión general de Redis y sus características principales. Para
más información consulta los siguientes enlaces:
Sitio Oficial.
Documentación.
Redis Lab.
Try Redis.
Upstash.
Regresar
Principales características:
1. Compresión y eficiencia de almacenamiento: al almacenar los datos de una columna juntos, pueden aplicar técnicas de
compresión específicas de la columna, lo que puede reducir significativamente el espacio de almacenamiento requerido
y mejorar la eficiencia de lectura y escritura.
2. Acceso selectivo a columnas: las consultas pueden recuperar y analizar selectivamente columnas específicas en lugar
de tener que leer todas las columnas en una fila. Esto permite un acceso más rápido a los datos y un menor uso de
recursos.
3. Alto rendimiento en análisis y agregaciones: están optimizadas para consultas analíticas y agregaciones en grandes
conjuntos de datos. Al almacenar columnas juntas, pueden realizar operaciones de agregación,
como SUM, COUNT y AVG, de manera más eficiente.
4. Escalabilidad horizontal: son altamente escalables horizontalmente, lo que significa que se pueden agregar nuevos
nodos y distribuir los datos en clústeres para manejar grandes volúmenes de datos y cargas de trabajo intensivas.
5. Flexibilidad de esquema: al igual que otras bases de datos NoSQL, ofrecen flexibilidad en el esquema de datos, lo que
permite agregar, eliminar o modificar columnas sin afectar el esquema global de la base de datos.
Algunos ejemplos populares de bases de datos de columnas son Apache Cassandra, Apache
HBase y ScyllaDB. Estas bases de datos son ampliamente utilizadas en aplicaciones que manejan grandes
volúmenes de datos y necesitan un rendimiento rápido en consultas analíticas y agregaciones.
En resumen, las bases de datos de columnas ofrecen un enfoque eficiente y optimizado para almacenar y
recuperar datos, especialmente para aplicaciones que requieren análisis y agregaciones rápidas en grandes
conjuntos de datos. Su diseño centrado en columnas, compresión eficiente y escalabilidad horizontal las
hacen ideales para casos de uso donde la velocidad y el rendimiento son críticos.
Apache Cassandra
Apache Cassandra es una base de datos distribuida, altamente escalable y de alto rendimiento, diseñada para
manejar grandes volúmenes de datos y proporcionar alta disponibilidad sin puntos únicos de fallo. Fue
desarrollada originalmente por Facebook y luego se convirtió en un proyecto de código abierto de la Apache
Software Foundation.
Principales características:
1. Escalabilidad horizontal: está diseñada para escalar horizontalmente de manera transparente al agregar nuevos nodos
al clúster. Esto permite manejar grandes volúmenes de datos y cargas de trabajo intensivas.
2. Modelo de datos sin esquema: es una base de datos NoSQL que utiliza un modelo de datos sin esquema fijo. Esto
significa que no requiere un esquema predeterminado y puede almacenar diferentes estructuras de datos en diferentes
filas dentro de una misma tabla.
3. Alta disponibilidad y tolerancia a fallos: está diseñada para ser altamente disponible y tolerante a fallos. Utiliza una
arquitectura distribuida en la que los datos se replican automáticamente en múltiples nodos, lo que permite que el
sistema continúe funcionando incluso en caso de fallas de nodos individuales.
4. Rendimiento rápido en escrituras y lecturas: está optimizada para proporcionar un alto rendimiento en operaciones de
escritura y lectura. Utiliza una estructura de registro de escritura optimizada para evitar problemas de bloqueo y
garantizar un rendimiento rápido en escrituras.
5. Consultas flexibles: admite consultas flexibles utilizando su propio lenguaje de consulta llamado CQL (Cassandra Query
Language) que es similar a SQL y permite realizar consultas ricas en datos utilizando índices y filtros.
6. Soporte para replicación multi-región: proporciona capacidades de replicación multi-región, lo que permite distribuir
los datos en diferentes ubicaciones geográficas. Esto es útil para garantizar la baja latencia de las operaciones y cumplir
con los requisitos de cumplimiento normativo.
7. Integración con herramientas de la familia Apache: se integra de manera nativa con herramientas populares de análisis
de datos como Apache Spark y Apache Hadoop, lo que permite realizar análisis y consultas complejas en grandes
conjuntos de datos.
Apache Cassandra se utiliza en una amplia gama de aplicaciones, incluyendo redes sociales, aplicaciones
de IoT, sistemas de seguimiento y análisis de registros, aplicaciones de comercio electrónico y mucho más.
Su escalabilidad, rendimiento y capacidad de manejar grandes volúmenes de datos hacen que sea una opción
popular para casos de uso que requieren un alto rendimiento y disponibilidad.
Espero que esta introducción te haya dado una visión general de Apache Cassandra y sus características
principales. Para más información consulta los siguientes enlaces:
Sitio Oficial.
Documentación.
Cassandra en Datastax.
Regresar
Bases orientadas a grafos
Las bases de datos de grafos son un tipo de base de datos diseñada específicamente para almacenar y
consultar datos en forma de grafos. En un grafo, los datos se representan como nodos (también conocidos
como vértices) y las relaciones entre los nodos se representan como aristas (también conocidas como
bordes). Esta estructura permite modelar y analizar relaciones complejas entre los datos de manera eficiente.
Principales características:
1. Modelo de datos basado en grafos: que es ideal para representar y trabajar con datos que tienen relaciones complejas.
Cada nodo representa una entidad y las aristas representan las relaciones entre esas entidades.
2. Relaciones y propiedades: Además de las aristas que conectan los nodos, los nodos y las aristas también pueden tener
propiedades asociadas. Estas propiedades pueden representar información adicional sobre los nodos y las relaciones.
3. Consultas y análisis de relaciones: están optimizadas para ello y pueden realizar consultas complejas que siguen los
caminos y patrones de las relaciones entre los nodos de manera eficiente.
4. Flexibilidad y escalabilidad: son altamente flexibles y escalables. Pueden manejar fácilmente conjuntos de datos
grandes y crecer a medida que aumenta el tamaño y la complejidad de los datos.
5. Descubrimiento de patrones y recomendaciones: son especialmente útiles para descubrir patrones, identificar
conexiones ocultas y realizar recomendaciones basadas en las relaciones entre los datos. Son ampliamente utilizadas en
aplicaciones de recomendación, análisis de redes sociales y detección de fraudes, entre otros casos de uso.
6. Integración con lenguaje de consulta específico: proporcionan un lenguaje de consulta específico para realizar
consultas y análisis de grafos. Por ejemplo, Cypher para Neo4j y Gremlin para Apache TinkerPop.
En resumen, las bases de datos de grafos son una poderosa herramienta para almacenar, consultar y analizar
datos con relaciones complejas. Su enfoque en el modelado de datos basado en grafos permite descubrir
información valiosa y patrones ocultos en los datos.
Neo4j
Neo4j es una base de datos de grafos líder en el mercado, diseñada específicamente para almacenar,
consultar y analizar datos en forma de grafos. Es altamente escalable, flexible y optimizada para trabajar con
relaciones complejas entre los datos. Neo4j utiliza el lenguaje de consulta Cypher, que es un lenguaje
específico de dominio para consultas de grafos.
Principales características:
1. Modelo de datos basado en grafos: utiliza un modelo de datos basado en grafos, donde los datos se representan como
nodos y relaciones entre los nodos. Los nodos representan entidades y las relaciones representan las conexiones entre
esas entidades.
2. Consultas y análisis de grafos: permite realizar consultas y análisis sofisticados de grafos utilizando su lenguaje de
consulta Cypher, que es intuitivo y fácil de usar que permite expresar patrones y relaciones complejas en los datos.
3. Alto rendimiento y escalabilidad: está diseñada para ofrecer un alto rendimiento y escalabilidad. Puede manejar
grandes volúmenes de datos y crecer horizontalmente agregando más nodos al clúster.
4. Flexibilidad en el esquema: A diferencia de las bases de datos relacionales, no requiere un esquema fijo y rígido.
Permite la flexibilidad en la definición de propiedades y relaciones en tiempo de ejecución, lo que facilita la adaptación
a cambios en los datos.
5. Indexación y búsqueda eficiente: proporciona capacidades de indexación eficientes para acelerar las búsquedas y
consultas en los datos de grafos. Esto permite un acceso rápido a los nodos y relaciones relevantes en grandes
conjuntos de datos.
Neo4j es ampliamente utilizado en una variedad de aplicaciones y casos de uso, incluyendo análisis de redes
sociales, recomendaciones personalizadas, detección de fraudes, gestión de identidad y acceso, gestión de
conocimientos y muchas más.
Neo4j ofrece una gama de ediciones, incluyendo una edición gratuita llamada Neo4j Community Edition y
una edición comercial llamada Neo4j Enterprise Edition, que ofrece características adicionales,
escalabilidad empresarial y soporte técnico.
Neo4j se integra bien con varios lenguajes de programación y marcos de desarrollo, y cuenta con una
comunidad activa que proporciona recursos, documentación y ejemplos para ayudar a los desarrolladores a
aprovechar al máximo la base de datos.
Espero que esta introducción te haya dado una visión general de Neo4j y sus características principales. Para
más información consulta los siguientes enlaces:
Sitio Oficial.
Documentación.
Consola de Administración.
Regresar
Principales características:
1. Modelo de datos basado en documentos: en lugar de utilizar una estructura de tablas y filas como en las bases de
datos relacionales, las bases de datos documentales almacenan los datos en documentos individuales. Cada documento
puede contener información compleja y estructurada, como campos anidados y matrices.
2. Flexibilidad en el esquema: ofrecen flexibilidad en el esquema, lo que significa que los documentos individuales no
necesitan seguir un esquema fijo. Cada documento puede tener su propia estructura y no se requiere una estructura
uniforme para todos los documentos en la base de datos.
3. Consultas y búsquedas eficientes: proporcionan una amplia gama de operaciones de consulta y búsqueda para acceder
a los datos almacenados en los documentos. Pueden realizar consultas flexibles utilizando índices y proporcionar un
alto rendimiento en búsquedas.
4. Escalabilidad horizontal: están diseñadas para escalar horizontalmente al agregar nuevos nodos a un clúster. Esto
permite manejar grandes volúmenes de datos y cargas de trabajo intensivas.
5. Replicación y alta disponibilidad: Para garantizar la disponibilidad de datos, muchas bases de datos de documentos
admiten la replicación de datos en múltiples nodos, lo que permite una mayor disponibilidad y tolerancia a fallos.
6. Integración con lenguajes de programación y marcos de desarrollo: suelen proporcionar bibliotecas y controladores
para una fácil integración con diferentes lenguajes de programación y marcos de desarrollo. Esto facilita el desarrollo
de aplicaciones utilizando la base de datos de documentos elegida.
Algunos ejemplos populares de bases de datos de documentos son MongoDB, Couchbase, Apache
CouchDB y Amazon DocumentDB. Estas bases de datos son ampliamente utilizadas en aplicaciones web,
aplicaciones móviles, sistemas de gestión de contenidos (CMS), sistemas de gestión de usuarios y muchas
otras aplicaciones que requieren flexibilidad y escalabilidad en el manejo de datos no estructurados o semi-
estructurados.
MongoDB
MongoDB es una base de datos de documentos NoSQL, de código abierto y orientada a documentos más
populares y ampliamente utilizadas en la actualidad. Se caracteriza por su flexibilidad, escalabilidad y
rendimiento.
Principales características:
1. Modelo de datos basado en documentos: almacena los datos en documentos BSON (Binary JSON), que son
documentos JSON extendidos con tipos de datos adicionales. Los documentos BSON se organizan en colecciones, que
son similares a las tablas en las bases de datos relacionales.
2. Flexibilidad en el esquema: ofrece un esquema flexible, lo que significa que cada documento en una colección puede
tener una estructura diferente. No se requiere un esquema fijo y predefinido, lo que permite una fácil adaptación a los
cambios en los datos.
3. Alta escalabilidad: es altamente escalable y permite escalar horizontalmente mediante la distribución de datos en
múltiples servidores. Esto permite manejar grandes volúmenes de datos y cargas de trabajo intensivas.
4. Consultas y búsquedas eficientes: proporciona un potente lenguaje de consulta para realizar consultas y búsquedas
flexibles en los datos almacenados. Admite una amplia gama de operaciones de consulta, incluyendo filtrado,
proyección, agregación y búsqueda basada en índices.
5. Alta disponibilidad y replicación: ofrece opciones de replicación para garantizar la disponibilidad de los datos y la
tolerancia a fallos. Los datos se pueden replicar en múltiples nodos, lo que permite una mayor disponibilidad y permite
la recuperación ante fallos.
6. Escalabilidad geográfica: cuenta con funcionalidades para la distribución de datos a través de múltiples regiones
geográficas. Esto permite la creación de clústeres distribuidos en diferentes ubicaciones geográficas para garantizar un
acceso rápido a los datos en diferentes partes del mundo.
7. Integración con lenguajes y marcos de desarrollo: cuenta con controladores y bibliotecas para una amplia variedad de
lenguajes de programación y marcos de desarrollo. Esto facilita la integración con diferentes tecnologías y el desarrollo
de aplicaciones.
MongoDB es ampliamente utilizado en aplicaciones web, aplicaciones móviles, sistemas de análisis de datos,
sistemas de gestión de contenidos (CMS), sistemas de gestión de usuarios y muchos otros casos de uso que
requieren flexibilidad y escalabilidad en el manejo de datos.
MongoDB ofrece tanto una versión de comunidad gratuita como una versión comercial llamada MongoDB
Enterprise, que proporciona características adicionales, escalabilidad empresarial y soporte técnico.
Espero que esta introducción te haya dado una visión general de MongoDB y sus características principales.
Para más información consulta los siguientes enlaces:
Sitio Oficial.
Documentación.
MongoDB Atlas.
Consola de Administración.
Regresar