SQL Tema 1
Por qué bases de datos
Si has llegado hasta aquí, ya sabes programar en Java. Pero ahora vamos a resolver el gran problema de cualquier desarrollador: ¿qué pasa con los datos cuando cerramos el programa?
Hasta ahora, tus programas piden datos a los usuarios por consola, los guardan en variables o estructuras como arrays o listas, y funcionan perfectamente... hasta que cierras el programa y lo vuelves a abrir, y dichos datos han desaparecido: las variables se reinicializan. ¿Cómo guarda entonces una red social mi nombre de usuario, contraseña, lista de amigos, etc., sin que se le borre al cerrar y abrir la app?
Para eso están las bases de datos, una pieza fundamental en el desarrollo de software. Tanto que la gran mayoría de programas del mundo están formados por código de programación + bases de datos.
¿Para qué sirven las bases de datos?#
En tus programas de Java has usado variables para guardar puntuaciones, nombres, etc. Sin embargo, las bases de datos (BBDD) son herramientas especializadas en organizar, almacenar y recuperar grandes cantidades de información de forma eficiente.
En el desarrollo de software se usan para:
| Uso | Ejemplo |
|---|---|
| Gestión de usuarios | Guardar los inicios de sesión y las contraseñas de forma segura |
| Inventarios | Qué objetos tiene cada jugador en un RPG, o qué productos tiene Amazon |
| Rankings | Las mejores puntuaciones de todos los jugadores del mundo, los productos más vendidos o las publicaciones más vistas en Instagram |
Variables y arrays frente a bases de datos#
Para entender por qué necesitamos SQL, debemos diferenciar dónde vive la información mientras programamos:
Memoria volátil (RAM)#
Cuando creas un int puntuacion = 10; en Java, ese dato se guarda en la memoria RAM.
- Ventaja: es extremadamente rápida.
- Problema: si el programa se cierra, se produce un error o se apaga el PC, el dato desaparece para siempre.
Es como escribir en una pizarra: cuando termina la clase, se borra.
Memoria persistente (disco duro)#
Una base de datos guarda la información en el almacenamiento secundario (disco duro o SSD).
- Ventaja: los datos sobreviven al cierre del programa y a los apagones.
- Problema: las acciones de consultar y guardar datos son algo más lentas.
Es como escribir en un libro: la información permanece ahí aunque cierres el libro y lo guardes en la estantería.
| Característica | Variables (código) | Base de datos (SQL) |
|---|---|---|
| Dónde se guarda | En la memoria RAM | En el disco del servidor |
| Duración | Temporal (mientras corre el programa) | Permanente (hasta que se borre) |
| Velocidad | Muy rápida | Algo más lenta |
| Acceso | Solo desde el programa actual | Desde muchas aplicaciones a la vez |
Importante
Pero entonces, cuando aprendamos bases de datos... ¿dejaremos de usar variables y arrays?
No, siempre usaremos variables, arrays y otras estructuras de código. Si tu programa debe preguntarle el nombre y la edad al usuario, debe guardarlas en variables (los lenguajes de programación no tienen otra opción).
Sin embargo, tú como desarrollador deberás saber cuáles de los datos que maneja tu programa pueden perderse al salir y cuáles no. Los que no puedan perderse, los mandaremos desde nuestro código a una base de datos. En el futuro, cuando el usuario abra la app, nuestro código podrá preguntar esos datos a la base de datos y traerlos de vuelta a una variable para poder volver a utilizarlos.
Razónalo tú mismo#
Imagina que estás creando un clon de Minecraft y necesitas guardar la siguiente información:
- Posición (coordenadas) del jugador en cada momento.
- Posición (coordenadas) de cada bloque utilizado para construir una casa.
¿Dónde guardarías la posición del jugador? ¿Es importante que mañana, cuando vuelva a abrir el juego, el jugador esté en el mismo sitio... o puede empezar siempre desde un origen?
¿Y la posición de la casa? ¿Es importante que mañana siga ahí?