Bases de datos

¿Cuál es adecuada para tu proyecto web?

Cualquier persona que se plantea desarrollar un proyecto web notará que las opciones por las que puede empezar son tan variadas que llegan a abrumarla. Sumado a la cantidad increíble de tecnologías existentes, a diario te encuentras con fl amantes alternativas que surgen en el mercado: modernos lenguajes que aparecen y se popularizan, otros que no llegan a ser lo que prometen, nuevas formas de programar, librerías y frameworks que se lanzan al mundo del desarrollo. Pero eso no es todo pues la elección de una base de datos es fundamental y, en este Informe USERS, se presentan las alternativas disponibles para que elijas la más adecuada para tus proyectos.

Entre los lenguajes más usados, Java, C, Python y JavaScript se mantienen en los primeros puestos según el índice TIOBE.

El mundo del desarrollo web

Microsoft, bajo el ecosistema .NET y, más orientado a la Web, ASP.NET, ofrece un entorno completo para el desarrollador, apostando fuerte por el lenguaje C#, para brindar una dura competencia a otras empresas y tecnologías. Oracle, un gran rival, ofrece la plataforma Java, uno de los lenguajes más clásicos del mundo, multiplataforma y con inclinación a la programación orientada a objetos, un paradigma moderno y robusto que le ha permitido posicionarse como una de las empresas de software de mayor renombre. A su vez, se encuentra Google, una empresa competidora con la cual ha tenido varios roces legales. Esta ha apostado por su lenguaje Kotlin y la plataforma de desarrollo para móviles Android, permitiendo a los programadores utilizar Java o su lenguaje para crear aplicaciones nativas distribuibles por medio de Google Play Store.

También ha desarrollado un lenguaje conocido popularmente como Go, una alternativa veloz y potente, que te permite compilar programas fácilmente a formato .exe. Además, ha realizado frameworks, como Angular, para el lenguaje JavaScript, una tecnología de amplia fama y con un crecimiento exponencial al día de hoy. Otra alternativa de renombre es Laravel, especial para el desarrollo en PHP, que ha superado la categoría de framework y se ha convertido en todo un ecosistema con máquinas virtuales, una comunidad extensa y un framework robusto y potente. Incluso, si piensas en otras empresas, como Apple, ves que han creado su propio lenguaje, Swift, el cual te permite desarrollar aplicaciones nativas para el sistema operativo de móviles iOS.

Aun mencionando todas estas tecnologías y empresas, muchas de las más importantes se escaparían, y la lista puede continuar de forma extensa. Y todo esto, sin mencionar un aspecto fundamental del desarrollo, que consiste en la información persistente, las bases de datos. Así como las empresas han apostado fuerte por los lenguajes de programación, también lo han hecho con lo relacionado a los sistemas que gestionan la información.Al comenzar un proyecto, un punto importante que debe considerar el desarrollador es qué plataforma se adecua a sus necesidades, qué lenguaje o framework puede utilizar para que cubra las necesidades de su proyecto. Dentro de esta decisión, si el proyecto necesita una, se incluye la elección de un motor de bases de datos. Al igual que con el lenguaje, existen muchísimas opciones de bases de datos entre las cuales elegir, y distintas empresas que ofrecen alternativas que aseguran ser las mejores del mercado.Antes de adentrarse en qué tipo de base de datos es mejor elegir, es importante conocer qué son las bases de datos y en qué categorías puede encajar cada una.

Stack Overfl ow incluye JavaScript entre los lenguajes más usados.

Bases de datos

Las bases de datos son conjuntos de información guardada en un mismo lugar sin importar el formato en el cual se almacenen; suelen estructurar la información, almacenar digitalmente todo centralizado y, a su vez, utilizar algún tipo de sistema de gestión o motor para controlar los datos. Si se habla estrictamente, la base de datos es algo distinto del sistema de gestión, dado Oracle cuenta con una cuenta oficial con tecnologías open source para la comunidad.

que esta es estrictamente el sitio donde se almacena la información, y el motor o sistema de gestión es el software que permite manipular y gestionar la información. Si has trabajado con alguna base de datos, como MySQL, sabrás que el motor de las bases de datos te permite visualizar la información por consola, por medio del software PHPMyAdmin o por otro software externo. Sin embargo, la información se almacena en un sistema de fi cheros con varias extensiones, que MySQL se encarga de interpretar. Con esto, se puede establecer que por un lado se encuentra la base de datos en sí con la información, y por otro lado, un motor que permite manipular los datos.En contraste total con MySQL, existen otros motores de bases de datos, como MongoDB, que entra dentro de la categoría de motor NoSQL, una categoría que pronto conocerás más en detalle. MongoDB es un motor de base de datos no relacional, cuya particularidad consiste en almacenar la información en formato JSON, una notación derivada de la forma en la que se construyen los objetos en JavaScript y que guarda los datos en ficheros utilizando un formato conocido como BSON. Mongo se encarga de trabajar con la información, por medio de un formato veloz y que no requiere que todos los datos lleven una misma estructura, permitiendo una versatilidad mayor que otros tipos de bases de datos.

Microsoft se ha planteado proveer servicios en la nube para desarrolladores con distintas necesidades.

Las bases de datos más populares

Para hacer un pequeño repaso de las bases de datos más populares, se debería comenzar por MySQL, la más utilizada mundialmente y la que fue elegida durante 2020 por la mayoría de los desarrolladores como el motor para manipular la información.

MySQL

El gestor MySQL es una de las bases de datos relacionales más conocidas en el mundo y fue desarrollada por MySQL AB, una empresa que, pocos años después de su surgimiento, fue comprada por Sun Microsystems, compañía responsable de la creación del lenguaje de programación Java y que, en 2010, fue adquirida por Oracle. MySQL utiliza el motor InnoDB, una tecnología de código abierto, que permite crear relaciones entre tablas dentro del gestor SQL.Con esta inversión, la empresa Oracle adquirió dos de sus tecnologías más conocidas dentro del ámbito del desarrollo, posicionándose como una de las proveedoras de servicios más grandes del mundo. Otra de sus famosas tecnologías es la base de datos relacional que lleva el mismo nombre de la empresa Oracle.Desarrollado con los lenguajes Javay C++, Oracle es un motor de base de datos relacionales que utiliza un dialecto del lenguaje estándar SQL, sobre el que aprenderás más adelante en esta obra. En contraposición con el servicio

MySQL, este software es privativo, es decir, no es de código abierto y solo presenta una versión gratuita. La mayoría de sus ediciones, entre ellas las populares Standard Editiony Enterprise Edition, son pagas y privativas.

PostgreSQL

Dentro del mundo de las bases de datos relacionales, también encontrarás PostgreSQL, un motor de bases de datos que trabaja con un sublenguaje SQL, que nació como un proyecto de Michael Stonebraker en la Universidad de Berkeley, en los años ochenta. Es un software de código abierto, gratuito, distribuible y que permite la colaboración de la comunidad de desarrollo.Dentro de las empresas que distribuyen software, Microsoft ha sido pionera y una de las que más renombre alcanzó. Por ello, no es sorpresa que posea más de un sistema de bases de datos muy utilizado, como SQL Server. Este gestor también utiliza un dialecto de SQL, fue desarrollado en los lenguajes C y C++, y posee una versión gratuita para el desarrollo.

Facebook

Si se mencionan las bases de datos más populares y de renombre, es necesario citar aquellas creadas por Facebook. La empresa responsable de esta red social ha creado varios motores de bases de datos y ha llegado al punto de necesitar el uso de muchísimos otros gestores de forma simultánea, dada la cantidad de información que posee y manipula. Una de las más populares es Cassandra, un gestor de tipo NoSQL, desarrollado bajo el lenguaje Java y de código abierto, bajo la licencia Apache 2.0. Cassandra se popularizó por su rendimiento alto y el uso de colecciones para el almacenamiento de la información bajo un sistema de nodos. Dentro de las bases de datos NoSQL, también se encuentra Redis, un gestor no relacional que almacena la información en notación clave/valor, utilizando listas, hashes y sets para sus estructuras.

SQL vs. NoSQL

La diferencia dentro del mundo de las bases de datos que permite categorizarlas es la característica de ser relacional o no relacional.

Las bases de datos relacionales son aquellas que trabajan con tablas, es decir que la información es almacenada dentro de bases de datos en cuyo interior se pueden encontrar gran cantidad de tablas que organizan los datos. Estos se relacionan entre las diferentes tablas por medio de claves primarias y claves foráneas, así se obtiene información relevante con consultas que unen y generan nuevas tablas. Estas bases de datos, además, por lo general utilizan algún dialecto o versión propia del lenguaje estándar SQL.El lenguaje SQL, cuyas siglas signifi can Structured Query Languaje o, en español, lenguaje de consultas estructuradas, es un formato que apareció hace ya casi 40 años en 1974 tras haber sido creado por Donald Chamberlin. En 1987, el lenguaje pasó a ser un estándar internacional, gracias a su inclusión dentro del Instituto Nacional Estadounidense de Estándares y dentro de la ISO, la Organización Internacional de Normalización. Su inserción dentro de estos organismos les permitió, a las distintas empresas, crear motores de bases de datos relacionales que utilizaran un dialecto del lenguaje SQL original. Aunque sus lenguajes fi nales no son iguales, que deriven de una misma fuente permite que el aprendizaje de un motor como MySQL no sea complejo, si antes se ha trabajado con otro gestor como SQL Server. Las principales diferencias entre los dialectos SQL que los motores de bases de datos ofrecen se basan en las características mejoradas que cada uno presenta.

Manipulación de tablas

La forma en que los gestores manipulan tablas con cientos o miles de registros varía si MySQL utiliza un motor distinto a SQL Server para optimizar las consultas. En el caso de SQL Server, la cantidad de registros que se desea retornar con una consulta se debe limitar al comienzo, dado que el motor optimiza lasconsultas de forma que no tomará más de cierta cantidad de registros desde el comienzo. La sintaxis será algo similar a la siguiente:

SELECT TOP 25 * FROM CLIENTES WHERE COMPRAS=10

Mientras que MySQL gestiona la información de manera distinta, priorizando las cláusulas WHERE y el ordenamiento a los límites, y requiere que escribas el límite de registros al fi nal de la consulta:

SELECT * FROM CLIENTES WHERE COMPRAS=10 LIMIT 25

De esta forma, obtendrías el mismo resultado: una tabla de clientes con aquellos registros cuyo campo COMPRAS sea igual a 10 y con un total de 25 fi las. Sin embargo, cada consulta debe realizarse en el motor que le corresponde, en caso contrario generarán un error de sintaxis.Manipulación de tablas.

SQL

Si tu proyecto necesita almacenar clientes que siempre se registrarán por medio de un formulario con los mismos campos y propiedades, como nombre, compras, deuda y datos de contacto, una base de datos SQL puede ser una gran opción. Además, una tabla con compras que se relacione y almacene cada transacción con una clave que haga referencia al campo cliente puede ser perfecta, dado que puedes tener múltiples registros de compras para un mismo cliente en una sola tabla. Otro ejemplo puede ser un blog o una revista virtual, donde se almacenan varias entradas o noticias en una base de datos, y cuyos comentarios se relacionen por medio de claves primarias y foráneas. Sin embargo, al igual que en el ejemplo anterior, las entradas o noticias siempre tienen la misma estructura, un título, un cuerpo de la noticia y la fecha, mientras que los comentarios siempre tendrán un campo para el usuario, una fecha, una clave foránea que haga referencia a qué noticia se comenta y el cuerpo del comentario en sí.

NoSQL

Sin embargo, si intentas almacenar un dato, un comentario o una noticia en una tabla con esta estructura, pero que tenga más características –por ejemplo comentarios relacionados– o siguiendo la lógica de una red social, reacciones al comentario o le agregues imágenes, sería imposible dicho almacenamiento. La estructura debe respetarse sin sumar datos con otro formato; aun más, si en la estructura de tu tabla has definido que algún campo –como título– o cuerpo no pueden ser nulos, es decir que no es posible guardar datos sin ese campo, jamás podrás guardar un registro que no lo posea.Si bien evitar este tipo de datos es una validación extra que tu aplicación puede tener para impedir que un usuario, de forma errónea o con mala intención, guarde información inválida, también puede convertirse en una desventaja, ya que existe la posibilidad de que desees guardar en algún momento datos diferentes. Volviendo a los ejemplos anteriores, puede interesarte guardar compras donde almacenes, además, los productos de la transacción, el precio u otro dato distinto. Un comentario podría también, poseer imágenes, reacciones u otras respuestas infinitas. La solución a este límite fue la aparición de las bases de datos no relacionales o NoSQL. Este adjetivo no significa que se intente negar el uso del lenguaje SQL o bloquearlo de alguna forma, sino que se trata de una sigla: Not Only SQL o, en español, no solo SQL.Las bases de datos no relacionales permiten la inserción de datos de formas variadas sin necesidad de respetar una estructura fija, es decir, permite abstraer al motor de la estructura de datos. Las validaciones de cómo debe introducirse la información pueden realizarse en el cliente o en el servido, y le permiten al desarrollador crear estructuras de datos diferentes. Por ejemplo, es posible que un comentario pueda o no tener otros relacionados en una base de datos como MongoDB. También incluir información, como fechas y fotos, o no tenerla, sin necesidad de crear campos nulos. Una transacción puede o no tener asociados distintos datos, como diferentes valores de moneda, archivos adjuntos –como facturas o números de cuenta bancaria–, productos extras, descuentos, métodos de pago dobles, verificaciones por compras online, entre muchos otros. En casos como estos, una base de datos no relacional puede ser la solución, por ejemplo, insertando un dato como este en una colección de MongoDB.

¿Cuál es mejor?

Como con los lenguajes de programación, es importante tener en cuenta que un motor de bases de datos no es mejor o peor solo por comparación con otro ni tampoco es malo o superior a todos los demás.

Cada uno fue diseñado y construido con las necesidades que tenían en mente sus creadores, por lo que, al tener en cuenta esto, también es importante considerar tus propias necesidades en cada sistema que crees: su arquitectura, el problema que debe resolver y con qué herramientas se trabajará.Si tu intención es trabajar con sistemas de gestión que solo permitan la inserción de datos estructurados de cierta manera y con campos que no deben variar y que no pueden omitirse, una buena opción puede ser un gestor SQL. MySQL es una herramienta práctica que te permite trabajar cómodamente con aplicaciones web, dado que se instala con facilidad en servidores Linux, e incluso se encuentra instalado en algunos de estos sistemas. Si tu intención es trabajar con un lenguaje como PHP, Java o Python para desarrollar una aplicación web, MySQL posee conexiones sencillas para el trabajo con estas tecnologías, con drivers preinstalados en PHP o instalables para Java provistos oficialmente por Oracle. MySQL ofrece una base de datos sólida que te permite organizar la información y ordenarla con consultas sencillas.Si tu necesidad es la creación de un sistema desktop o aplicación para escritorio, que debe correr sobre sistemas Windows, .NET es una muy buena opción, y SQL Server es el gestor de bases de datos que más se utiliza en conjunto con el ecosistema de Microsoft. SQL Server se caracteriza por ser veloz, tener versiones ligeras del software y optimizar a fondo las consultas de datos.

Aunque por lo general estas tecnologías suelen usarse en conjunto, es posible aprovecharlas de diversas formas por medio de PHP para conectar a bases de datos SQL Server, SQLite –un gestor minimalista muy utilizado para pruebas y aplicaciones pequeñas–, PostgreSQL, o incluso, a MongoDB o Redis. Java permite conectar rápidamente a gestores de su empresa responsable, como MySQL, MariaDB y Oracle, pero también puede conectar a MongoDB, SQL Server, PostgreSQL, Redis, entre muchos otros.