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

Por qué las aplicaciones web necesitan bases de datos

Una aplicación puede mostrar una pantalla, recopilar un dato o ejecutar una acción. Pero ¿qué ocurre cuando necesita recordar algo?
Una plataforma de reservas debe recordar clientes, servicios y citas. Un e-commerce debe gestionar productos, pedidos e inventario. Una plataforma SaaS debe saber qué usuarios tienen una cuenta, qué proyectos han creado y qué permisos poseen.
Para eso existen las bases de datos.
Una base de datos es el lugar donde una aplicación almacena de forma estructurada y persistente la información que necesita. Sin una base de datos, muchos datos podrían existir solo temporalmente en el navegador. Al cerrar la página, podrían perderse. Con una base de datos, en cambio, la aplicación puede guardar información y recuperarla más adelante, incluso desde distintos dispositivos y para diferentes usuarios.
Una base de datos es la memoria de la aplicación
Puedes pensar en la 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.
En una aplicación de reservas, por ejemplo:
Frontend → muestra los servicios y el calendario Backend → comprueba la disponibilidad y los permisos Base de datos → almacena usuarios, servicios y reservas
Existen distintos tipos de bases de datos. Las bases de datos documentales trabajan con documentos flexibles, las de clave-valor están optimizadas para determinados tipos de acceso rápido, mientras que las bases de datos relacionales organizan los datos en tablas conectadas entre sí. SQL y Postgres pertenecen principalmente a este ámbito. Supabase, por su parte, crea alrededor de Postgres un conjunto de servicios de backend pensados 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→ los usuarios;services→ los servicios disponibles;bookings→ las reservas.
Dentro de cada tabla encontrarás:
- columnas, que describen las propiedades de los datos;
- filas, que representan los registros individuales;
- claves primarias, que identifican cada registro de forma única;
- claves foráneas, que conectan registros de distintas tablas;
- restricciones, que impiden guardar datos no válidos.
Por ejemplo, una reserva podría incluir un profile_id y un service_id.
De este modo sabrás exactamente quién hizo la reserva y qué servicio eligió, sin tener que copiar toda la información del usuario y del servicio dentro de cada reserva.
¿Por qué son importantes las relaciones?
Imagina que un servicio cambia de nombre. Si el nombre estuviera copiado dentro de cada reserva, tendrías que actualizar cientos o miles de registros. Con una base de datos relacional, en cambio, la reserva puede limitarse a hacer referencia al servicio correspondiente. Las relaciones entre los datos permiten reducir duplicidades e incoherencias y mantener más ordenado el modelo del producto.
¿Qué es el esquema de una base de datos?
Antes de crear una base de datos, hay que 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 reflejar en la base de datos cómo funciona realmente el producto.
Antes de crear una tabla nueva, 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 tabla enorme con información completamente distinta puede resultar difícil de gestionar. Al mismo tiempo, dividir cada pequeño dato en una tabla independiente puede complicar el sistema innecesariamente.
Un buen esquema encuentra el equilibrio entre la coherencia 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. SQL es el lenguaje que se utiliza para interactuar con muchas bases de datos relacionales.
Puedes usarlo para:
- crear estructuras;
- leer datos;
- añadir registros;
- modificar información;
- eliminar registros;
- relacionar datos procedentes 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 recuperar las reservas de un usuario concreto. Una consulta SQL podría ser:
SELECT id, start_time, status
FROM bookings
WHERE profile_id = 42
ORDER BY start_time;
En la práctica, estamos diciendo:
“Dame el ID, la hora y el estado de las reservas del usuario 42, ordenadas por hora”.
SQL también permite combinar información procedente 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 obtener, junto con la hora, el nombre del servicio.
SQL es declarativo
Una característica importante de SQL es que se trata de un lenguaje declarativo. No tienes que explicarle necesariamente a la base de datos cada paso que debe seguir para encontrar una información. Le indicas qué resultado quieres obtener y la base de datos decide cómo ejecutar la consulta.
Además, SQL es un estándar ampliamente utilizado, aunque los distintos sistemas pueden tener funciones y extensiones específicas. Para empezar, no es necesario aprenderlo todo. Comprender conceptos como SELECT, filtros, JOIN, agrupaciones, restricciones y transacciones ya basta para construir una base sólida.
¿Qué es Postgres?
Aquí es importante hacer una distinción: SQL es el lenguaje. Postgres es la base de datos.
Postgres, o más exactamente 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 con el que te comunicas 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 un e-commerce. Cuando un cliente compra un producto, el sistema podría tener que:
- crear el pedido;
- reducir el inventario;
- registrar el pago.
Estas operaciones están relacionadas. Si la primera se completa correctamente, pero la segunda falla, podrías acabar con un pedido registrado y un inventario sin actualizar.
Las transacciones permiten tratar varias operaciones como una sola unidad: o todas se completan correctamente o la base de datos puede devolver la situación a su estado anterior.
¿Y los índices?
Los índices sirven para acelerar determinadas búsquedas. Si una aplicación necesita buscar continuamente las reservas de un usuario en una fecha concreta, un índice puede hacer que esta operación sea mucho más eficiente. Pero los índices no son gratuitos: ocupan espacio y requieren trabajo adicional cuando 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 real de consulta del producto.
¿Qué es Supabase?
Si Postgres es la base de datos, Supabase es una plataforma de backend construida alrededor de Postgres. No sustituye a Postgres.
En su lugar, añade una serie de servicios que normalmente se necesitan para crear aplicaciones web, entre ellos:
- autenticación y gestión de sesiones;
- almacenamiento de archivos;
- herramientas para administrar la base de datos;
- funciones del lado del servidor;
- API conectadas a los datos;
- Row Level Security.
Por tanto, 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 cosas distintas
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 Row Level Security (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 ejecute 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 la Row Level Security cobra importancia: permite definir las 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 dispone de un entorno dedicado de Supabase con Postgres, Auth, Storage, Deno Edge Functions y Row Level Security. Además, ya se incluyen una estructura básica para los perfiles y un sistema inicial de roles.
La diferencia es que no tienes que empezar necesariamente configurando la base de datos de forma manual. Puedes describir a través del chat lo que quieres crear.
Por ejemplo:
“Añade servicios con duración, precio y estado activo”.
Después:
“Crea reservas vinculadas a los usuarios autenticados”.
Y también:
“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 las migraciones, conectar el frontend de React con el backend y configurar las políticas 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 mientras sigues modificando la aplicación mediante la conversación.
El mejor prompt no es «crea una base de datos»
Cuando trabajas con un creador de aplicaciones con 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. Indica:
- cuáles son las entidades principales;
- qué información deben contener;
- cómo están relacionadas;
- qué campos son obligatorios;
- qué usuarios pueden acceder a los datos;
- qué acciones pueden realizar.
De este modo, la IA dispone de la información necesaria para transformar la descripción de un producto en una estructura de datos coherente.
Buenas prácticas para empezar con las bases de datos
No necesitas ser especialista en bases de datos para evitar los errores más habituales.
Utiliza identificadores estables
Cada tabla importante debería tener una clave primaria. Evita utilizar datos como nombres o direcciones de correo electrónico como identificadores permanentes: pueden cambiar.
Coloca las reglas cerca de los datos
La validación en el frontend es útil para la experiencia del usuario, pero no debería ser la única protección. Utiliza:
- campos obligatorios;
- restricciones de unicidad;
- claves foráneas;
- tipos de datos adecuados;
- políticas de acceso.
De este modo, la base de datos puede proteger la integridad de los datos independientemente del origen de una solicitud.
Sigue el principio de mínimo privilegio
Cada usuario debería tener únicamente los permisos necesarios para realizar su trabajo. Por tanto, 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 evolucionan junto con los productos. Al añadir una función nueva, puede que tengas que crear una tabla, añadir una columna o modificar una relación. Utilizar migraciones controladas permite llevar un registro de estos cambios y reduce el riesgo de perder datos existentes. Antes de eliminar una columna o modificar una estructura, comprueba siempre que ya no se utilice.
Modela el producto, no la pantalla
Esta es quizá la regla más importante. Una tabla debería representar un concepto real del producto, no simplemente una pantalla de la interfaz. El diseño de un panel puede cambiar por completo. Sin embargo, un cliente, una reserva o un pedido siguen representando las mismas entidades. 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 los 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 se integran en el proceso de creación de la aplicación. Puedes describir con lenguaje natural qué debe recordar tu aplicación, cómo deben relacionarse 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 permite hacer algo aún más importante: describir mejor lo que quieres crear. No tienes que escribir SQL necesariamente. Pero saber qué son las tablas, las relaciones, los roles, las restricciones y los permisos te ayuda a transformar una idea en una aplicación que no se limita a mostrar datos, sino que realmente sabe almacenarlos, relacionarlos y protegerlos.


