¿Base de datos SQL o NoSQL cual elegir?
Base de datos SQL o NoSQL, la interrogante que surge cada vez que se desarrolla un proyecto informático, y si estás aquí, sabes que la base de datos es una pieza fundamental que tiene la capacidad de potenciar o limitar el rendimiento de nuestra aplicación, según las decisiones que se tomen.
Antes de los años 2000, las bases de datos más comunes que se utilizaban para el desarrollo eran las RDBMS, también conocidas como bases de datos relacionales, las cuales estructuraban la información en tablas. Hoy en día, se ha popularizado el uso de las bases de datos no relacionales, las cuales administran la información de manera diferente a las bases de datos tradicionales.
Aquí hablaremos sobre estos dos tipos de bases de datos, sus características, ventajas y desventajas, así como algunos productos existentes para cada una de ellas, para que puedas implementar la base de datos adecuada según las necesidades a desarrollar.
Base de datos SQL o Relacionales
Las base de datos relacionales, tienen como estructura principal las relaciones entre entidades que representan objetos de la vida real, mediante las tablas y llaves primarias.
Tablas
Las tablas son aquel espacio donde se guarda la información de una entidad de la vida real, ya sea una persona, un lugar, un reporte, el tiempo de los últimos años, mediciones de estaciones, etc. Todo lo que se te ocurra puede ser almacenado en una tabla. La organización de estos datos se realiza mediante columnas y filas, parecidas a un Excel, donde las filas representan el espacio donde se guardarán los registros con sus datos, y las columnas ordenan estos datos indicando qué representa cada dato del registro.

Relaciones
Estas tablas se relacionan mediante llaves, la clave primaria y las claves foráneas. La clave primaria es el ID principal del registro en la tabla (e2_id, e1_id), y es esa misma clave primaria la que conforma la clave foránea de otra tabla (department_id).
Estas bases de datos pueden llegar a tener muchas entidades y relaciones. A medida que el negocio y los requerimientos crezcan, los datos y el modelo de datos también lo harán.

Desventajas
A continuación revisaremos algunas desventajas propias de este tipo de base de datos.
1.- Escalabilidad
La escalabilidad, a medida que evoluciona la base de datos, se vuelve más compleja debido a que a mayor volumen de datos, relaciones entre tablas y usuarios conectados, las consultas se vuelven más pesadas. Por lo tanto, será necesario aumentar la capacidad del servidor de forma vertical.
2.- Extension del modelo
La extensión del modelo aumenta a medida que las necesidades del negocio crecen, pero la rigidez de la estructura de los datos dificulta su modificación. Es necesario asegurar la retrocompatibilidad y establecer procedimientos de migración.
3.- Manejo de datos no estructurados
Las bases de datos relacionales, al trabajar con datos estructurados organizados en filas y columnas, presentan dificultades para almacenar datos no estructurados, como audio, video, imágenes, entre otros.
4.- Rendimiento en consultas complejas
Las bases de datos relacionales manejan bien las consultas simples, como eliminar, filtrar, buscar, insertar y modificar. Sin embargo, su rendimiento disminuye a medida que estas consultas se vuelven más complejas con la unión de múltiples tablas, lo que ralentiza las operaciones de lectura.
5.- Costos
Este tipo de base de datos, generalmente tiene costos elevados asociado a licencias y/o implementaciones. Puedes ver el cálculo para la implementacion en GCP https://cloud.google.com/products/calculator
Ventajas
A continuación veremos las ventajas de usar una base de datos SQL
1.- Integridad de los datos
La base de datos SQL ofrece mecanismos de seguridad que permiten mantener la integridad de los datos al realizar acciones de inserción, modificación y eliminación. Es posible elegir qué hacer con los datos referenciados en otros registros.
2.- Lenguaje standard
SQL es el lenguaje estándar de estas bases de datos, lo que permite cambiar de plataformas y ejecutar las mismas consultas.
3.- Transacciones ACID
La base de datos permite realizar operaciones seguras, confiables y consistentes mediante las transacciones ACID (Atomicidad, Consistencia, Aislamiento, Durabilidad). Te invito a revisar el siguiente recurso si deseas obtener más información sobre las transacciones ACID. https://es.wikipedia.org/wiki/ACID
4.- Consultas complejas
SQL, mediante su lenguaje, permite realizar consultas realmente complejas utilizando comandos como WHERE, ORDER BY, NOT IN, JOINS, entre otros.
Base de datos NoSQL o no relacionales
Las bases de datos NoSQL no estructuran la información de la misma manera que las bases de datos SQL. En este aspecto, nos centraremos en los dos principales grupos:
- Base de datos en base a documentos
- Base de datos en base clave-valor
Base de datos documentales
Este tipo de base de datos es uno de los más usados y se basa, como su nombre lo indica, en documentos que se organizan en colecciones dentro de una base de datos. Un ejemplo sería una carpeta donde se guardan todas las facturas de luz: la carpeta sería la colección y las facturas serían los documentos.
Lo particular de este tipo de base de datos es que el documento contiene la información en formato JSON, lo que lo hace muy fácil de leer y entender si has trabajado con JSON.

En este caso, lo que antes era una tabla en la base de datos relacional ahora se convierte en una colección (representada por un recuadro verde), y lo que antes era un registro dentro de esa tabla ahora se trata de un documento (representado por archivos rojos) que contiene la información ordenada como un JSON.
Esta es la principal diferencia en cuanto el como se organiza la información.
Lo genial de este tipo de base de datos es que cuando se agregan nuevas propiedades al modelo del documento, solo se necesita hacerlo en el código, ya que el ORM del framework se encargará de agregar automáticamente este nuevo dato a los documentos nuevos.
Pero, ¿qué sucede con los documentos antiguos?
Pues bien, al tratar con estas nuevas propiedades en los documentos antiguos, se mapearán como nulos!. Solo tienes que encargarte de manejarlos según tus reglas de negocio. ¿No es genial?
Base de datos clave-valor
Este tipo de base de datos está entre las más utilizadas. Básicamente, funciona como un gran saco donde almacenamos objetos y les asociamos una clave con el cual podemos recuperarlos posteriormente.
Los objetos que se pueden guardar en este tipo de base de datos son variados, desde datos primitivos hasta objetos complejos y archivos.
Se utiliza principalmente para el almacenamiento en caché de datos, sesiones de usuarios, configuraciones, entre otras cosas.
Ventajas
A continuación veremos las ventajas de usar una base de datos NoSQL
1.- Escalabilidad
Las bases de datos NoSQL están diseñadas para escalar horizontalmente, lo que les permite manejar grandes volúmenes de datos distribuidos en múltiples máquinas. Esto facilita el ajuste de los servidores según la demanda de manera sencilla.
2.- Flexibilidad
NoSQL ofrece una gran flexibilidad en el esquema, ya que no utiliza un esquema fijo y rígido. Esto permite añadir, modificar y eliminar campos según lo requiera el negocio, agilizando el desarrollo de nuevas funcionalidades.
3.- Alta disponibilidad y tolerancia a fallos
Este tipo de base de datos ofrece mecanismos de replicación y distribución de los datos entre las máquinas, lo que significa que si un servidor falla, la base de datos seguirá funcionando sin interrupciones gracias a su redundancia.
4.- Facilidad para recuperar datos
La facilidad para recuperar datos es mayor en este tipo de base de datos, debido a que toda la información, o la mayoría de ella, se encuentra disponible bajo un ID o clave única, lo que permite recuperarla directamente como objeto sin necesidad de realizar mapeos o transformaciones adicionales.
Desventajas
A continuación, revisaremos algunas desventajas propias de este tipo de base de datos.
1.- Inconsistencia en los datos
Al no almacenar los datos de forma estructurada como las bases de datos relacionales, la actualización de datos se debe realizar en todos los objetos que contengan esos datos como estructura interna. Por ejemplo, al actualizar el nombre del autor presente como objeto en los documentos de libros.
2.- Consultas complejas
Es difícil realizar consultas complejas en una base de datos no relacional debido a que no se dispone de las herramientas que ofrece una base de datos SQL. Por lo tanto, la responsabilidad de unir los datos y formar la información solicitada recae en el desarrollador.
Productos y servicios disponibles

Nuestro querido elefante PostgreSQL, es una base de datos relacional SQL que ocupa el cuarto puesto en el ranking de las bases de datos más populares.

El grande Oracle, es una base de datos relacional SQL que ocupa el primer puesto en el ranking de las bases de datos más populares. Se caracteriza por su soporte y ser un software con licencia.
Oracle es una de las bases de datos más utilizadas y antiguas del mercado.

El principal producto de base de datos de Microsoft es una base de datos relacional SQL que ocupa el tercer puesto en el ranking de las bases de datos más populares. Al igual que Oracle, es un software con licencia.

En lo personal, mi favorito es una base de datos NoSQL orientada a documentos MongoDB, que ocupa el quinto puesto en el ranking de las bases de datos más populares. Tiene una capa gratuita y de pago, la cual puedes consultar en https://www.mongodb.com.

Redis, el gran aliado para almacenar en caché respuestas y evitar la saturación de la base de datos, es una base de datos NoSQL orientada a clave-valor que ocupa el sexto puesto en el ranking de las bases de datos más populares.
Estas son algunas de las bases de datos más populares. Si deseas conocer el top 10, visita https://db-engines.com/en/ranking y descubre todas las opciones disponibles.
NOTA: El puntaje obtenido es calculado por db-engines.com y aquí puedes revisar su metodología.
Eligiendo entre NoSQL y SQL
¿Base de datos SQL o NoSQL?. Ya tienes la respuesta, si la funcionalidad que van a desarrollar requiere una alta consistencia de los datos y la lectura es menor que la escritura, la elección adecuada sería implementarlo en una base de datos SQL. Esta opción es la más óptima para los informes o reportes.
Si la funcionalidad a desarrollar implica una baja escritura y modificación, pero los datos a obtener requieren muchas lecturas y no se ve afectada por la baja consistencia de los datos, puedes optar por implementarlo en una base de datos NoSQL. Esta opción es la más óptima para vistas que se muestran de forma masiva.
Despedida
Con esto nos despedimos. Espero que este Recetario Digital de Base de Datos SQL o NoSQL te haya ayudado a elegir el tipo de base de datos adecuado para tu desarrollo. Si te gustaron las bases de datos NoSQL, recuerda que también tenemos el Recetario Construyendo MVPs: Acelerando Ideas con Firebase y Angular, que involucra Firebase!.

