Bases de datos para principiantes: SQL, Postgres y Supabase
Aprende cómo las bases de datos relacionales organizan la información, cómo funciona SQL y por qué Postgres y Supabase suelen utilizarse juntos en las aplicaciones web modernas. Esta lección también aborda el diseño de esquemas, la seguridad y los flujos de trabajo prácticos con bases de datos en Coderblock.

Por qué las aplicaciones web necesitan bases de datos

Una aplicación puede mostrar una pantalla, recopilar información o realizar una acción. Pero ¿qué ocurre cuando necesita recordar algo?
Una plataforma de reservas necesita recordar a sus clientes, servicios y citas. Una tienda de comercio electrónico debe gestionar productos, pedidos e inventario. Una plataforma SaaS necesita saber qué usuarios tienen una cuenta, qué proyectos han creado y qué permisos poseen.
Por eso existen las bases de datos.
Una base de datos es el lugar donde una aplicación almacena la información que necesita de forma estructurada y persistente. Sin una base de datos, gran parte de esa información podría existir solo temporalmente en el navegador. Al cerrar la página, podría perderse. Con una base de datos, la aplicación puede guardar información y recuperarla más adelante, desde distintos dispositivos y para diferentes usuarios.
Una base de datos es la memoria de la aplicación
Puedes pensar en una base de datos como la memoria permanente de una aplicación.
El frontend muestra la información. El backend aplica la lógica. La base de datos almacena los datos.
Por ejemplo, en una aplicación de reservas:
Frontend → muestra los servicios y el calendario Backend → comprueba la disponibilidad y los permisos Base de datos → almacena usuarios, servicios y reservas
Existen varios tipos de bases de datos. Las bases de datos documentales trabajan con documentos flexibles; las bases de datos clave-valor están optimizadas para determinados tipos de acceso rápido; y las bases de datos relacionales organizan los datos en tablas conectadas. SQL y Postgres pertenecen principalmente a este último grupo. Supabase, por su parte, reúne en torno a Postgres un conjunto de servicios de backend para aplicaciones web.
Bases de datos relacionales: tablas, filas y relaciones
Una base de datos relacional organiza la información en tablas. Por lo general, cada tabla representa un tipo de entidad. En una plataforma de reservas, podrías tener:
profiles→ usuarios;services→ servicios disponibles;bookings→ reservas.
Dentro de cada tabla encontrarás:
- columnas, que describen las propiedades de los datos;
- filas, que representan registros individuales;
- claves primarias, que identifican de forma única cada registro;
- claves foráneas, que conectan registros de distintas tablas;
- restricciones, que impiden guardar datos no válidos.
Por ejemplo, una reserva podría contener un profile_id y un service_id.
Esto permite saber exactamente quién hizo la reserva y qué servicio eligió, sin tener que copiar toda la información del usuario y del servicio en cada reserva individual.
¿Por qué son importantes las relaciones?
Imagina que un servicio cambia de nombre. Si el nombre estuviera copiado en cada reserva, tendrías que actualizar cientos o miles de registros. Con una base de datos relacional, la reserva puede limitarse a hacer referencia al servicio correcto. Por tanto, las relaciones entre los datos ayudan a reducir la duplicación y las incoherencias, además de mantener mejor organizado el modelo del producto.
¿Qué es el esquema de una base de datos?
Antes de crear una base de datos, debes decidir cómo organizar la información. El conjunto de tablas, columnas, relaciones, tipos de datos y restricciones que define esta estructura se denomina esquema. Diseñar bien el esquema significa conseguir que la base de datos refleje cómo funciona realmente el producto.
Antes de crear una tabla, pregúntate:
- ¿Qué representa cada registro?
- ¿Qué información es obligatoria?
- ¿Qué valores deben ser únicos?
- ¿Qué entidades deben estar conectadas?
- ¿Quién puede leer o modificar estos datos?
El objetivo no es crear tantas tablas como sea posible. Una única tabla enorme que contenga tipos de información completamente diferentes puede resultar difícil de gestionar. Al mismo tiempo, guardar cada pequeño dato en una tabla independiente puede complicar el sistema sin necesidad.
Un buen esquema equilibra la consistencia de los datos, la sencillez de las consultas y las necesidades reales del producto.
¿Qué es SQL?
Aquí entra en juego SQL, sigla de Structured Query Language o lenguaje de consulta estructurado. SQL es el lenguaje utilizado para interactuar con muchas bases de datos relacionales.
Puedes usarlo para:
- crear estructuras;
- consultar datos;
- añadir registros;
- modificar información;
- eliminar registros;
- conectar datos de distintas tablas.
Las cuatro operaciones fundamentales suelen resumirse con el acrónimo CRUD:
- Create → crear
- Read → leer
- Update → actualizar
- Delete → eliminar
Un ejemplo sencillo
Supongamos que queremos obtener las reservas realizadas por un usuario concreto. Una consulta SQL podría tener este aspecto:
SELECT id, start_time, status
FROM bookings
WHERE profile_id = 42
ORDER BY start_time;
En la práctica, estamos diciendo:
«Muéstrame los identificadores, las horas y los estados de las reservas del usuario 42, ordenados por hora».
SQL también puede combinar información de distintas tablas. Por ejemplo:
SELECT bookings.start_time, services.name
FROM bookings
JOIN services ON services.id = bookings.service_id;
Esta consulta conecta las reservas con sus servicios correspondientes para devolver el nombre del servicio junto con la hora de la reserva.
SQL es declarativo
Una característica importante de SQL es que se trata de un lenguaje declarativo. No tienes que explicar necesariamente cada paso que la base de datos debe seguir para encontrar cierta información. Le indicas qué resultado quieres y la base de datos decide cómo ejecutar la consulta.
SQL también es un estándar ampliamente utilizado, aunque cada sistema puede ofrecer sus propias funciones y extensiones. No necesitas aprenderlo todo de una vez. Comprender conceptos como SELECT, filtros, JOIN, agrupaciones, restricciones y transacciones ya es suficiente para construir una base sólida.
¿Qué es Postgres?
Es importante hacer una distinción: SQL es el lenguaje. Postgres es la base de datos.
Postgres, o más concretamente PostgreSQL, es un sistema de gestión de bases de datos relacionales de código abierto. Es el software que almacena los datos, aplica las restricciones e interpreta las consultas SQL.
Puedes entender la relación de esta manera:
SQL → el lenguaje que utilizas para comunicarte Postgres → el sistema que almacena y gestiona los datos
Postgres admite funciones esenciales como:
- claves primarias y claves foráneas
- transacciones
- índices
- vistas
- restricciones
- tipos de datos avanzados
¿Por qué son importantes las transacciones?
Imagina una tienda de comercio electrónico. Cuando un cliente compra un producto, el sistema puede necesitar:
- crear el pedido;
- reducir el inventario;
- registrar el pago.
Estas operaciones están conectadas. Si la primera se completa, pero la segunda falla, podrías acabar con un pedido registrado y un inventario que nunca llegó a actualizarse.
Las transacciones permiten tratar varias operaciones como una sola unidad: o todas se completan correctamente o la base de datos puede restaurar el estado anterior.
¿Y los índices?
Los índices aceleran determinadas búsquedas. Si una aplicación necesita encontrar repetidamente las reservas de un usuario en una fecha concreta, un índice puede hacer que esa operación sea mucho más eficiente. Pero los índices no son gratuitos: ocupan espacio y requieren trabajo adicional cada vez que se modifican los datos.
Por eso, indexar automáticamente todas las columnas no es una buena práctica. Un índice debe responder a un patrón de consulta real del producto.
¿Qué es Supabase?
Si Postgres es la base de datos, Supabase es una plataforma de backend creada en torno a Postgres. No sustituye a Postgres.
En su lugar, añade una serie de servicios que suelen ser necesarios para desarrollar aplicaciones web, entre ellos:
- autenticación y gestión de sesiones;
- almacenamiento de archivos;
- herramientas de administración de bases de datos;
- funciones del lado del servidor;
- API de datos;
- seguridad a nivel de fila o Row Level Security.
La distinción más importante que debes recordar es:
SQL es el lenguaje. Postgres es la base de datos. Supabase es una plataforma de backend que utiliza Postgres y añade servicios para crear aplicaciones.
Esta combinación resulta especialmente útil para las aplicaciones web porque permite gestionar datos, usuarios, archivos y permisos dentro de una infraestructura integrada.
Autenticación y autorización: dos conceptos diferentes
También en este caso conviene separar dos conceptos. Autenticación significa:
«¿Quién es este usuario?»
Autorización significa:
«¿Qué puede hacer este usuario?»
Supabase Auth puede gestionar el registro, el inicio de sesión y las sesiones. La seguridad a nivel de fila (RLS) puede determinar qué filas de la base de datos puede leer o modificar un usuario concreto. Imagina una plataforma de reservas. Un cliente debería poder ver:
sus propias reservas.
Un administrador, en cambio, podría ver:
todas las reservas.
Ambos son usuarios autenticados, pero tienen permisos diferentes.
La seguridad no puede depender solo del frontend
Ocultar un botón en la interfaz no impide que alguien realice una operación. Un usuario podría intentar enviar una solicitud directamente al backend.
Por eso, las reglas de acceso deben aplicarse en el backend y en la base de datos, no solo en la interfaz. Aquí es donde cobra importancia la seguridad a nivel de fila: permite definir reglas de acceso directamente en la base de datos.
Cómo funcionan las bases de datos en Coderblock
En las aplicaciones web estándar de Coderblock, cada proyecto cuenta con un entorno dedicado de Supabase con Postgres, Auth, Storage, Deno Edge Functions y Row Level Security. También se incluyen de forma predeterminada una estructura básica de perfiles y un sistema inicial de roles.
La diferencia es que no tienes por qué empezar configurando manualmente la base de datos. Puedes describir mediante el chat lo que quieres crear.
Por ejemplo:
«Añade servicios con una duración, un precio y un estado activo».
Después:
«Crea reservas vinculadas a usuarios autenticados».
Y luego:
«Impide que los clientes vean las reservas de otros clientes y crea una vista de administración para gestionarlas todas».
El agente puede diseñar el esquema, aplicar migraciones, conectar el frontend de React con el backend y configurar las políticas de RLS necesarias. Después, en la sección Backend del editor, puedes consultar las tablas, los usuarios autenticados, el almacenamiento y las funciones.
La vista previa en tiempo real se actualiza a medida que sigues modificando la aplicación mediante la conversación.
La mejor instrucción no es «crea una base de datos»
Cuando trabajas con un creador de aplicaciones basado en IA, no basta con pedir:
«Crea una base de datos para una aplicación de reservas».
Es mucho más útil describir el modelo del producto. Especifica:
- las entidades principales;
- qué información deben contener;
- cómo están conectadas;
- qué campos son obligatorios;
- qué usuarios pueden acceder a los datos;
- qué acciones pueden realizar.
Esto proporciona a la IA la información que necesita para convertir la descripción de un producto en una estructura de datos coherente.
Buenas prácticas de bases de datos para principiantes
No necesitas ser especialista en bases de datos para evitar los errores más comunes.
Utiliza identificadores estables
Toda tabla importante debe tener una clave primaria. Evita utilizar datos como nombres o direcciones de correo electrónico como identificadores permanentes, ya que pueden cambiar.
Mantén las reglas cerca de los datos
La validación en el frontend mejora la experiencia de usuario, pero no debe ser la única protección. Utiliza:
- campos obligatorios;
- restricciones de unicidad;
- claves foráneas;
- tipos de datos adecuados;
- políticas de acceso.
Esto permite que la base de datos proteja la integridad de los datos, independientemente del origen de una solicitud.
Sigue el principio del mínimo privilegio
Cada usuario debe tener únicamente los permisos necesarios para cumplir su función. Prueba la aplicación con distintos roles:
- visitante anónimo;
- usuario autenticado;
- administrador.
Comprueba siempre qué puede leer, crear, modificar o eliminar cada rol.
Gestiona el esquema mediante migraciones
Las bases de datos cambian junto con los productos. Cuando añades una función nueva, quizá necesites crear una tabla, incorporar una columna o modificar una relación. El uso de migraciones controladas permite registrar estos cambios y reduce el riesgo de perder datos existentes. Antes de eliminar una columna o cambiar una estructura, asegúrate siempre de que ya no se utiliza.
Modela el producto, no la pantalla
Esta puede ser la regla más importante. Una tabla debe representar un concepto real del producto, no simplemente una pantalla de la interfaz. El diseño de un panel puede cambiar por completo. Un cliente, una reserva o un pedido siguen representando la misma entidad. Pensar primero en el modelo de datos también facilita la evolución futura del frontend.
SQL, Postgres y Supabase: lo que realmente debes recordar
Si estás empezando, no necesitas memorizar decenas de términos.
Recuerda esta relación:
SQL → el lenguaje utilizado para consultar y modificar datos Postgres → la base de datos relacional que almacena los datos y ejecuta las consultas Supabase → la plataforma de backend que utiliza Postgres y añade autenticación, almacenamiento, API, funciones y herramientas para crear aplicaciones web
En Coderblock, estos conceptos están integrados en el proceso de creación de aplicaciones. Puedes describir con lenguaje natural qué necesita recordar tu aplicación, cómo deben conectarse los datos y quién puede acceder a ellos. El agente puede encargarse de la implementación full stack mientras tú revisas y perfeccionas el resultado a través del chat.
Entender cómo funcionan las bases de datos te ayuda a hacer algo aún más importante: describir con mayor claridad lo que quieres crear. No tienes por qué escribir SQL. Sin embargo, saber qué son las tablas, las relaciones, los roles, las restricciones y los permisos te ayudará a convertir una idea en una aplicación que haga algo más que mostrar datos: podrá almacenarlos, conectarlos y protegerlos de verdad.


