Está en la página 1de 49

mircha

CursosBlogHolaMentoríaTaller

Bases de Datos

Última actualización: Feb 26 2023

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.

¿Cuál es la diferencia entre información y 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.

Por ejemplo: El número 38 es un dato. Saber que 38 es la edad de Jon es información.

Una base de datos es una colección de información cuidadosamente organizada en un sistema.


La tecnología que permite organizar los datos y representar la información esencial para un sistema de
información se denomina Sistema Gestor de Base de Datos (SGBD) o por sus siglas en inglés
(DBMS) Data Base Management System.

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.

Algunas ventajas de los DBMS son:

 Están optimizados para almacenar y manipular grandes cantidades de datos.


 Ofrecen mayor seguridad y administración de la información.
 Permiten a varios usuarios acceder y manipular la información de forma concurrente.
 Garantizan la integridad de los datos.

Un DBMS puede contener muchas bases de datos.

Los DBMS se pueden dividir en dos grandes grupos: relacionales (SQL) y no relacionales (NoSQL).

Regresar

Tipos de Bases de Datos


Cuando desarrollamos una aplicación y nos encontramos en el momento de elegir una base de datos,
siempre llegamos a un punto en el que nos hacemos la misma pregunta:

¿Qué tipo de base de datos debo elegir?


Independientemente de los distintos gestores de bases de datos que existen en la actualidad, esta pregunta
siempre suscita la duda de sí debemos elegir una base de datos relacional o no relacional.

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.

Bases de Datos Relacionales

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.

Bases de Datos No Relacionales

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.

¿Cuándo utilizar SQL o NoSQL?

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.

Todos estos ejemplos almacenan la información y no la relacionan entre sí.

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

 Códigos Postales México


 CPs México en formato TXT
 Consulta de CPs México

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.

La incorporación de la lógica de negocios en el modelo de datos es importante porque permite asegurarse de


que los datos estén correctamente validados y se respeten las restricciones de negocios antes de ser
almacenados en la base de datos.

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.

El objetivo de la normalización es reducir la redundancia y garantizar la integridad de los datos al asegurar


que cada dato solo se almacene en un solo lugar y que los datos sean consistentes y coherentes. La
normalización también ayuda a mejorar el rendimiento de la base de datos, ya que reduce el tamaño y la
complejidad de las entidades, lo que facilita la indexación y la búsqueda de información.

Es importante tener en cuenta que la normalización puede tener un impacto en el rendimiento de la


aplicación, ya que puede requerir una mayor cantidad de consultas y una complejidad adicional para
recuperar y manipular datos. Por lo tanto, es importante encontrar un equilibrio entre la normalización y la
eficiencia en el diseño de la base de datos.

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.

Normalizando una base de datos

Veamos un ejemplo de normalización de base de datos.

Tenemos una entidad desnormalizada de "Ventas" de una tienda con la siguiente información:

Puedes normalizarme el siguiente modelo de datos


Venta Fecha Cliente Correo Teléfono Dirección Ciud
1 01/01 Juan Perez juan.perez@gmail.com 5512345678 Calle 1 No. 58-1 CP 03100 CDMX
2 02/01 Pedro Gomez pedro.gomez@gmail.com 3387654321 Calle 2 No. 85-6 CP 44100 Guad
3 03/01 Ana Silva ana.silva@gmail.com 8109128734 Calle 3 No. 33-3 CP 64000 Mont
4 04/01 Ana Silva ana.silva@gmail.com 8109128734 Calle 3 No. 33-3 CP 64000 Mont
5 05/01 Juan Perez juan.perez@gmail.com 5512345678 Calle 4 45-3 03920 CDMX
La primera forma normal busca tener valores atómicos, es decir datos simples que no puedan ser divididos
en parte más pequeñas, por lo que en el modelo anterior podríamos atomizar el nombre del cliente y su
dirección quedando de la siguiente forma:

Venta Fecha Nombre Apellido Correo Teléfono Calle Númer


1 01/01 Juan Perez juan.perez@gmail.com 5512345678 Calle 1 58-1
2 02/01 Pedro Gomez pedro.gomez@gmail.com 3387654321 Calle 2 85-6
3 03/01 Ana Silva ana.silva@gmail.com 8109128734 Calle 3 33-3
4 04/01 Ana Silva ana.silva@gmail.com 8109128734 Calle 3 33-3
5 05/01 Juan Perez juan.perez@gmail.com 5512345678 Calle 4 45-3
La segunda forma normal se refiere a la eliminación de las dependencias funcionales parciales. En este caso,
podemos identificar que los datos del cliente se duplican en las ventas.

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.

Venta Fecha Cliente Producto Precio


1 01/01 1 Laptop 25,000.00
2 02/01 2 Celular 12,000.00
3 03/01 3 Micrófono 2,500.00
4 04/01 3 Laptop 25,000.00
5 05/01 1 Micrófono 2,500.00
Cliente Nombre Apellido Correo Teléfono Calle Número
1 Juan Perez juan.perez@gmail.com 5512345678 Calle 1 58-1
2 Pedro Gomez pedro.gomez@gmail.com 3387654321 Calle 2 85-6
3 Ana Silva ana.silva@gmail.com 8109128734 Calle 3 33-3
1 Juan Perez juan.perez@gmail.com 5512345678 Calle 4 45-3
Sin embargo al extraer los datos del cliente se genera duplicidad de información, ya que se detecta que un
cliente puede tener más de una dirección, por lo que es necesario crear una entidad separada
llamada "Direcciones" que almacene estos datos y en la entidad principal "Ventas" agregamos la llave
foránea que haga referencia a dicha dirección y finalmente la entidad "Clientes" sólo quedaría con la
información personal de la persona.

Por lo que el modelo quedaría de la siguiente forma:

Venta Fecha Cliente Dirección Producto Precio


1 01/01 1 1 Laptop 25,000.
2 02/01 2 2 Celular 12,000.
3 03/01 3 3 Micrófono 2,500.0
4 04/01 3 3 Laptop 25,000.
5 05/01 1 4 Micrófono 2,500.0
Cliente Nombre Apellido Correo
Cliente Nombre Apellido Correo
1 Juan Perez juan.perez@gmail.com
2 Pedro Gomez pedro.gomez@gmail.com
3 Ana Silva ana.silva@gmail.com
Dirección Cliente Calle Número CP Ciudad
1 1 Calle 1 58-1 03100 CDMX
2 2 Calle 2 85-6 44100 Guadala
3 3 Calle 3 33-3 64000 Monterr
4 1 Calle 4 45-3 03920 CDMX
La tercer forma normal exige que no haya transparencias funcionales. Esto se logra removiendo todas las
dependencias transitivas, es decir, aquellas dependencias en las que un atributo depende indirectamente de
otro a través de un tercer atributo.

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.

Por lo cual nuestro modelo quedaría de la siguiente forma:

Venta Fecha Cliente Dirección Producto


1 01/01 1 1 1
2 02/01 2 2 2
3 03/01 3 3 3
4 04/01 3 3 1
5 05/01 1 4 3
Producto Nombre Precio
1 Laptop 25,000.00
2 Celular 12,000.00
3 Micrófono 2,500.00
Cliente Nombre Apellido Correo
1 Juan Perez juan.perez@gmail.com
2 Pedro Gomez pedro.gomez@gmail.com
3 Ana Silva ana.silva@gmail.com
Dirección Cliente Calle Número CP Ciudad
1 1 Calle 1 58-1 03100 CDMX
2 2 Calle 2 85-6 44100 Guadala
3 3 Calle 3 33-3 64000 Monterr
4 1 Calle 4 45-3 03920 CDMX
La cuarta forma normal (Boyce-Codd), es más restrictiva con las dependencias transitivas, por lo que
analizando la información del modelo detectamos que la entidad "Direcciones" sigue dependiendo
del "País", por lo que debemos crear una entidad adicional que contenga la información de dicho atributo.

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.

Al final de la normalización el modelo quedo de la siguiente manera:


Venta Fecha Cliente Dirección Producto
1 01/01 1 1 1
2 02/01 2 2 2
3 03/01 3 3 3
4 04/01 3 3 1
5 05/01 1 4 3
Producto Nombre Precio
1 Laptop 25,000.00
2 Celular 12,000.00
3 Micrófono 2,500.00
Cliente Nombre Apellido Correo
1 Juan Perez juan.perez@gmail.com
2 Pedro Gomez pedro.gomez@gmail.com
3 Ana Silva ana.silva@gmail.com
Dirección Cliente Calle Número CP Ciud
1 1 Calle 1 58-1 03100 CDMX
2 2 Calle 2 85-6 44100 Guad
3 3 Calle 3 33-3 64000 Mont
4 1 Calle 4 45-3 03920 CDMX
País Nombre Dominio
1 México mx
Regresar

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

Tipos de Sentencias SQL


En SQL existen varios tipos de sentencias que se utilizan para realizar diferentes operaciones en una base de
datos. Aquí te presento algunos de los tipos de sentencias más comunes:

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 y Funciones SQL


A continuación te enlisto, algunos de los comandos y funciones más utilizados en SQL.

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

Sintaxis SQL Básica


Conceptos básicos

 Una base de datos tiene tablas.


 Una tabla tiene campos (columnas) y registros (filas).
 El conjunto de campos generan un registro.
 Campo: un dato que por sí sólo no dice mucho.
 Registro: conjunto de campos que genera información.

Buenas prácticas

SQL, NO distingue entre MÁYUSCULAS y minúsculas pero:

 Comandos y palabras reservadas de SQL van en MÁYUSCULAS.


 Nombres de objetos y datos van en minúsculas con snake_case.
 Para strings usar comillas simples ( '' ).
 Todas las sentencias terminan con punto y coma ( ; ).

Regresar

Gestionando Bases de Datos

SHOW DATABASES;

CREATE DATABASE nombre_base;

CREATE DATABASE IF NOT EXISTS nombre_base;

DROP DATABASE nombre_base;

DROP DATABASE IF EXISTS nombre_base;

USE nombre_base;
Regresar

Usuarios y Privilegios

CREATE USER 'mi_usuario'@'servidor' IDENTIFIED BY 'mi_password';

--contraseña en hashSELECT PASSWORD('mi_password');

DROP USER 'mi_usuario'@'servidor';

GRANT ALL PRIVILEGES ON nombre_base.tabla TO 'mi_usuario'@'servidor' IDENTIFIED BY


'mi_password';

FLUSH PRIVILEGES;

SHOW GRANTS for 'mi_usuario'@'servidor';

REVOKE ALL, GRANT OPTION FROM 'mi_usuario'@'servidor';


Regresar
Gestionando Tablas

SHOW TABLES;

DESCRIBE nombre_tabla;

CREATE TABLE nombre_tabla(

campo1 TIPO_DATO ATRIBUTOS,

campo2 TIPO_DATO);

ALTER TABLE nombre_tabla ADD COLUMN nombre_campo TIPO_DATO;

ALTER TABLE nombre_tabla MODIFY nombre_campo TIPO_DATO;

ALTER TABLE nombre_tabla RENAME COLUMN nombre_viejo TO nombre_nuevo;

ALTER TABLE nombre_tabla DROP COLUMN nombre_campo;

DROP TABLE nombre_tabla;

--Ejemplo de TablaCREATE TABLE usuarios(

usuario_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

nombre VARCHAR(30) NOT NULL,

apellidos VARCHAR(30) NOT NULL,

correo VARCHAR(50) UNIQUE,

direccion VARCHAR(100) DEFAULT "Sin dirección",

edad INT DEFAULT 0);


Regresar

CRUD de Datos
 Create - INSERT.
 Read - SELECT.
 Update - UPDATE.
 Delete - DELETE.

CREATE

Insertar un registro:

INSERT INTO tabla (campo_1, campo_2, ..., campo_n)

VALUES (valor_1, valor2, ..., valor_n);

INSERT INTO tabla


SET campo_1 = 'valor_1', campo_2 = 'valor_2', ..., campo_n = valor_n;
Insertar varios registros:

INSERT INTO tabla (campo_1, campo_2, ..., campo_n) VALUES

(valor_1, valor2, ..., valor_n),

(valor_1, valor2, ..., valor_n),

...,

(valor_1, valor2, ..., valor_n);

READ

Leer todos los campos de la tabla:

SELECT * FROM tabla;


Leer algunos campos de la tabla:

SELECT campo_1, campo_2, campo_n FROM tabla;


Saber cuantos registros tiene mi tabla:

SELECT COUNT(*) FROM tabla;


Leer un registro en particular buscando el valor de un campo:

SELECT * FROM tabla WHERE campo_1 = 'valor_1';


Leer registros en particular buscando diferentes valores en un campo:

SELECT * FROM tabla WHERE campo_1 IN ('valor_1', 'valor_2', 'valor_n');


Leer un registro en particular buscando el valor similar en un campo:

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:

SELECT * FROM tabla WHERE campo_1 = 'valor_1' AND campo_2 = 'valor_2';SELECT *


FROM tabla WHERE campo_1 = 'valor_1' OR campo_2 = 'valor_2';SELECT * FROM tabla
WHERE NOT campo_1 = 'valor_1';SELECT * FROM tabla WHERE campo_1 != 'valor_1';

UPDATE

Siempre agregar la clausula WHERE para evitar actualizar toda la tabla:

UPDATE tabla

SET campo_1 = 'valor_1', campo_2 = 'valor_2', ..., campo_n = valor_n


WHERE campo = valor;

DELETE

Siempre agregar la clausula WHERE para evitar eliminar toda la tabla:

NO TE OLVIDES DEL WHERE EN EL DELETE FROM

DELETE FROM tabla WHERE campo = valor;


Regresar

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.

Supongamos que tenemos la siguiente tabla llamada "Ventas":

id producto cantidad fecha


1 Zapatos 5 2022-03-01
2 Camisas 3 2022-03-02
3 Zapatos 2 2022-03-03
4 Pantalón 4 2022-03-03
5 Camisas 7 2022-03-04
Podemos utilizar la cláusula GROUP BY para obtener la cantidad total de cada producto vendido, agrupando
por el nombre del producto.

SELECT producto, SUM(cantidad) AS total_vendido

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:

id producto cantidad fecha


1 A 10 2022-01-01
2 B 15 2022-01-02
3 C 20 2022-01-02
4 A 5 2022-01-03
5 B 8 2022-01-03
6 C 12 2022-01-04
Si queremos obtener la cantidad total de ventas para cada producto, podemos utilizar la cláusula GROUP
BY de la siguiente manera:

SELECT producto, SUM(cantidad) AS total_ventas

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:

SELECT producto, SUM(cantidad) AS total_ventas

FROM ventas

GROUP BY producto

HAVING SUM(cantidad) > 20;


Esta consulta devuelve el siguiente resultado:

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.

Supongamos que tenemos la siguiente tabla llamada "Clientes":

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:

SELECT DISTINCT nombre

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:

SELECT * FROM empleados ORDER BY salario ASC;


Esto nos devolvería todos los registros de la tabla "empleados" ordenados por el salario de forma ascendente.
Si quisiéramos ordenarlos de forma descendente, cambiaríamos "ASC" por "DESC":

SELECT * FROM empleados ORDER BY salario DESC;


De esta manera, se pueden ordenar los resultados de una consulta de acuerdo a un criterio específico.

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.

La sintaxis básica de la cláusula LIMIT es la siguiente:

SELECT columna_1, columna_2, ..., colunmna_n

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.

SELECT columna_1, columna_2, ..., columna_n

FROM tabla

LIMIT indice_inicio, cantidad_de_filas;


Donde indice_inicio es el índice de la primera fila que se debe devolver, y cantidad_de_filas es el número
máximo de filas que se deben devolver a partir de la fila de inicio.

Por ejemplo, la siguiente consulta devuelve los primeros 10 registros de la tabla "clientes":

SELECT * FROM clientes

LIMIT 10;
Y la siguiente consulta devuelve los registros 11 al 20 de la tabla "clientes":

SELECT * FROM clientes

LIMIT 10, 10;


Es importante tener en cuenta que el uso de la cláusula LIMIT puede afectar el rendimiento de la consulta,
especialmente cuando se utiliza con tablas grandes.

Regresar

Sintaxis SQL Avanzada


Índices

En SQL existen varios tipos de índices, los principales son:

 Í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

CREATE TABLE una_tabla(

campo_id INTEGER UNSIGNED PRIMARY KEY,

campo_unico VARCHAR(80) UNIQUE,

campo_index VARCHAR(80),

campo_3 VARCHAR(80),

campo_4 VARCHAR(80),

INDEX i_campo_index(campo_index)

FULLTEXT INDEX fi_campo_fulltext(campo_3, campo_4));


Ejecutando una consulta de tipo FULLTEXT

SELECT * FROM una_tabla

WHERE MATCH(campo_3, campo_4)

AGAINST('una_búsqueda' IN BOOLEAN MODE);


Regresar

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

Se define dentro de una tabla de la siguiente forma:

FOREIGN KEY (nombre_campo) REFERENCES tabla_referencia(campo_referencia)

Ejemplo

CREATE TABLE lenguajes (

lenguaje_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

lenguaje VARCHAR(30) NOT NULL);

CREATE TABLE entornos (


entorno_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

entorno VARCHAR(30) NOT NULL);

CREATE TABLE frameworks (

framework_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

framework VARCHAR(30) NOT NULL,

lenguaje INT UNSIGNED,

entorno INT UNSIGNED,

FOREIGN KEY (lenguaje) REFERENCES lenguajes(lenguaje_id),

FOREIGN KEY (entorno) REFERENCES entornos(entorno_id));


Regresar

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.

Los más importantes son los siguientes:

 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

INNER JOIN tabla_2 AS t2;

SELECT * FROM tabla_1 AS t1

INNER JOIN tabla_2 AS t2

ON t1.a_campo = t2.a_campo;

SELECT t1.campo_1, t1.campo_2, t1.campo_3, t2.campo_1, t2.campo_5

FROM tabla_1 AS t1

INNER JOIN tabla_2 AS t2

ON t1.campo_1 = t2.campo_5

WHERE t1.campo_1 = 'valor'


ORDER BY t1.campo_3 DESC;

/* Con FULLTEXT */SELECT t1.campo_1, t1.campo_2, t2.campo_1, t2.campo_4

FROM tabla_1 AS t1

INNER JOIN tabla_2 AS t2

ON t1.campo_1 = t2.campo_4

WHERE MATCH(t1.campo_1, t1.campo_2, t2.campo_1, t2.campo_4)

AGAINST('una_búsqueda' IN BOOLEAN MODE);


Regresar

Subconsultas

Es una consulta dentro de otra:

SELECT t1.campo_1, t1.campo_2, (

SELECT COUNT(*)

FROM tabla_2 AS t2

WHERE t2.campo_1 = t1.campo_1

) AS sub_consulta_campo

FROM tabla_1 AS t1;

SELECT t1.campo_1, t1.campo_2, t1.campo_3, (

SELECT campo_1

FROM tabla_2 AS t2

WHERE t2.campo_1 = t1.campo_1

) AS sub_consulta_campo

FROM tabla_1 AS t1;


Regresar

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.

CREATE VIEW nombre_vista AS

SELECT * FROM tabla WHERE campo_1 = 'valor_1';

DROP VIEW nombre_vista;

SELECT * FROM nombre_vista;

SHOW FULL TABLES IN nombre_bd WHERE TABLE_TYPE LIKE 'VIEW';


Regresar

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.

InnoDB es el motor de almacenamiento predeterminado en MySQL, y es compatible con transacciones y


restricciones de clave foránea, lo que lo hace más adecuado para aplicaciones que requieren una alta
integridad de los datos.

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

CREATE TABLE armaduras_myisam (

armadura_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

armadura VARCHAR(30) NOT NULL) ENGINE=MyISAM DEFAULT


CHARSET=utf8mb4;

CREATE TABLE armaduras_innodb (

armadura_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

armadura VARCHAR(30) NOT NULL) ENGINE=InnoDB DEFAULT


CHARSET=utf8mb4;
Regresar

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:

 CASCADE: elimina o actualiza automáticamente los registros relacionados en la tabla relacionada.


 SET NULL: establece los valores de la columna relacionada en NULL cuando se elimina o actualiza un registro en la tabla
principal.
 SET DEFAULT: establece los valores de la columna relacionada en su valor predeterminado cuando se elimina o
actualiza un registro en la tabla principal.
 RESTRICT: evita la eliminación o actualización de un registro en la tabla principal si hay registros relacionados en la tabla
relacionada.

Ejemplo

CREATE TABLE lenguajes (

lenguaje_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

lenguaje VARCHAR(30) NOT NULL);

CREATE TABLE entornos (

entorno_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

entorno VARCHAR(30) NOT NULL);

CREATE TABLE frameworks (

framework_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

framework VARCHAR(30) NOT NULL,


lenguaje INT UNSIGNED,

entorno INT UNSIGNED,

FOREIGN KEY (lenguaje)

REFERENCES lenguajes(lenguaje_id)

ON DELETE RESTRICT

ON UPDATE CASCADE,

FOREIGN KEY (entorno)

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.

En caso de que se produzca un error o falla en alguna de las operaciones, se utiliza la


sentencia ROLLBACK para deshacer todos los cambios y volver a un estado consistente de la base de datos.

START TRANSACTION;

INSERT INTO tabla_1 (campo_1, campo_2, campo_3)

VALUES ('valor_1', 'valor_2', 'valor_3');

INSERT INTO tabla_2 (campo_1, campo_2, campo_3)

VALUES ('valor_1', 'valor_2', 'valor_3');


INSERT INTO tabla_3 (campo_1, campo_2, campo_3)

VALUES ('valor_1', 'valor_2', 'valor_3');

COMMIT;

START TRANSACTION;

INSERT INTO tabla_1 (campo_1, campo_2, campo_3)

VALUES ('valor_1', 'valor_2', 'valor_3');

INSERT INTO tabla_2 (campo_1, campo_2, campo_3)

VALUES ('valor_1', 'valor_2', 'valor_3');

INSERT INTO tabla_3 (campo_1, campo_2, campo_3)

VALUES ('valor_1', 'valor_2', 'valor_3');

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.

Algunas de las funciones de encriptación más comunes son:

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.

SELECT AES_ENCRYPT('password', 'secret_key'),

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

CREATE TABLE pagos_recurrentes(

cuenta VARCHAR(8) PRIMARY KEY,

nombre VARCHAR(50) NOT NULL,

tarjeta BLOB);

INSERT INTO pagos_recurrentes VALUES

('12345678', 'Jon', AES_ENCRYPT('1234567890123488', '12345678')),

('12345677', 'Irma', AES_ENCRYPT('1234567890123477', '12345677')),

('12345676', 'Kenai', AES_ENCRYPT('1234567890123466', '12345676')),

('12345674', 'Kala', AES_ENCRYPT('1234567890123455', 'super_llave')),

('12345673', 'Miguel', AES_ENCRYPT('1234567890123444', 'super_llave'));

SELECT * FROM pagos_recurrentes;

SELECT CAST(AES_DECRYPT(tarjeta, '12345678') AS CHAR) AS tdc, nombre

FROM pagos_recurrentes;

SELECT CAST(AES_DECRYPT(tarjeta, 'super_llave') AS CHAR) AS tdc, nombre

FROM pagos_recurrentes;
Regresar

Procedimientos Almacenados

Un procedimiento almacenado o Stored Procedure en SQL es un conjunto de instrucciones que se


almacenan en la base de datos y se pueden llamar y ejecutar varias veces mediante una sola llamada al
procedimiento.
Estos procedimientos pueden aceptar parámetros de entrada y devolver valores de salida, y pueden ser
utilizados para realizar operaciones complejas en la base de datos de manera eficiente y segura.

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 //

CREATE PROCEDURE nombre_procedimiento(

IN valor_entrada TIPO_DATO,

IN valor_entrada_2 TIPO_DATO,

OUT valor_salida 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:

DROP PROCEDURE nombre_procedimiento();

SHOW PROCEDURE STATUS WHERE db = 'nombre_base_datos';

Ejemplo

Primero creamos las tablas necesarias para el ejemplo del procedimiento:

CREATE TABLE suscripciones (

suscripcion_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

suscripcion VARCHAR(30) NOT NULL,

costo DECIMAL(5,2) NOT NULL);

INSERT INTO suscripciones VALUES

(0, 'Bronce', 199.99),

(0, 'Plata', 299.99),

(0, 'Oro', 399.99);


CREATE TABLE clientes (

cliente_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

nombre VARCHAR(30) NOT NULL,

correo VARCHAR(50) UNIQUE);

CREATE TABLE tarjetas (

tarjeta_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

cliente INT UNSIGNED,

tarjeta BLOB,

FOREIGN KEY (cliente)

REFERENCES clientes(cliente_id)

ON DELETE RESTRICT

ON UPDATE CASCADE);

CREATE TABLE servicios(

servicio_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

cliente INT UNSIGNED,

tarjeta INT UNSIGNED,

suscripcion INT UNSIGNED,

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:

CREATE PROCEDURE sp_asignar_servicio(

IN i_suscripcion INT UNSIGNED,

IN i_nombre VARCHAR(30),

IN i_correo VARCHAR(50),

IN i_tarjeta VARCHAR(16),

OUT o_respuesta VARCHAR(50))

BEGIN

DECLARE existe_correo INT DEFAULT 0;

DECLARE cliente_id INT DEFAULT 0;

DECLARE tarjeta_id INT DEFAULT 0;

START TRANSACTION;

SELECT COUNT(*) INTO existe_correo

FROM clientes

WHERE correo = i_correo;

IF existe_correo <> 0 THEN

SELECT 'Tu correo ya ha sido registrado' INTO o_respuesta;

ELSE

INSERT INTO clientes VALUES (0, i_nombre, i_correo);

SELECT LAST_INSERT_ID() INTO cliente_id;

INSERT INTO tarjetas


VALUES (0, cliente_id, AES_ENCRYPT(i_tarjeta, cliente_id));

SELECT LAST_INSERT_ID() INTO tarjeta_id;

INSERT INTO servicios VALUES (0, cliente_id, tarjeta_id, i_suscripcion);

SELECT 'Servicio asignado con éxito' INTO o_respuesta;

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:

CALL sp_asignar_servicio(2, 'Kenai', 'kenai@gmail.com', '1234567890123490',


@res);SELECT @res;

SELECT * FROM clientes;SELECT * FROM tarjetas;SELECT * FROM servicios;


Regresar

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

DELIMITER //CREATE TRIGGER nombre_disparador

[BEFORE | AFTER] [INSERT | UPDATE | DELETE]

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:

DROP TRIGGER nombre_disparador;

SHOW TRIGGERS FROM 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:

CREATE TABLE actividad_clientes(

ac_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,

cliente INT UNSIGNED,

fecha DATETIME,

FOREIGN KEY (cliente)

REFERENCES clientes(cliente_id)

ON DELETE RESTRICT

ON UPDATE CASCADE);
Ahora creamos nuestro disparador:

CREATE TRIGGER tg_actividad_clientes

AFTER INSERT

ON clientes

FOR EACH ROW

BEGIN

INSERT INTO actividad_clientes VALUES (0, NEW.cliente_id, NOW());


END //

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.

CALL sp_asignar_servicio(2, 'Kenai', 'kenai@gmail.com', '1234567890123490',


@res);SELECT @res;
Para comprobar que el disparador se ejecuto revisamos la tabla "actividad_clientes":

SELECT * FROM actividad_clientes;


Regresar

NoSQL

Última actualización: Jul 14 2023

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.

¿Por qué es importante?

NoSQL es importante por varias razones:

 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.

¿Cuándo usar NoSQL?

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.

Desde entonces, se han creado muchos otros sistemas NoSQL,


incluyendo Cassandra, Couchbase, HBase, Redis, y muchos más. A medida que la tecnología ha
evolucionado, también lo han hecho los sistemas NoSQL, con características como la escalabilidad
automática, la integración con tecnologías en la nube, y la capacidad de procesamiento en tiempo real.

En resumen, la historia y evolución de NoSQL se remonta a la necesidad de manejar grandes volúmenes de


datos no estructurados que no podían ser gestionados de manera eficiente por las bases de datos relacionales
tradicionales. La innovación de modelos de datos no relacionales, la flexibilidad, escalabilidad y velocidad
han impulsado su crecimiento y popularidad en el mercado.

Ventajas y desventajas de NoSQL

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

Bases de datos NoSQL


Existen diferentes tipos de bases de datos NoSQL, cada uno con características y enfoques específicos para
manejar diferentes tipos de datos y problemas de escalabilidad.

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.

Las operaciones básicas en una base de datos de llave-valor incluyen:

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

Bases orientadas a columnas


Las bases de datos de columnas, también conocidas como bases de datos orientadas a columnas, son un tipo
de base de datos NoSQL que almacenan y organizan los datos en columnas en lugar de filas. A diferencia de
las bases de datos relacionales tradicionales, donde los datos se almacenan en filas y se agrupan en tablas,
las bases de datos de columnas almacenan cada columna de datos de manera contigua y se enfocan en
recuperar y analizar selectivamente columnas específicas.

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.

Algunos ejemplos populares de bases de datos de grafos incluyen Neo4j, Amazon


Neptune, JanusGraph, Apache TinkerPop y ArangoDB. Cada una de estas bases de datos tiene
características y enfoques ligeramente diferentes, pero todas comparten el enfoque de modelado de datos
basado en grafos y la capacidad de trabajar con relaciones complejas de manera eficiente.

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

Bases orientadas a documentos


Las bases de datos de documentos son un tipo de base de datos NoSQL que están diseñadas para almacenar,
recuperar y gestionar datos en forma de documentos. Un documento es una unidad de datos autocontenido
que puede contener información estructurada en un formato flexible, como JSON o BSON. Cada documento
puede tener una estructura diferente y no se requiere un esquema fijo y predefinido.

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

También podría gustarte