Volver a la lista

Guardar los datos experimentales de forma permanente en una base de datos.

Aprenda los conceptos básicos de las bases de datos y SQL con ejemplos de biología. Cree una tabla de administración de muestras y escriba consultas CRUD.

Principiante
|
60min
|
Verificado (2026-06)
Base de datosSQLTablaCRUDBase de datos relacionalMySQL
Progreso0/19 (0%)

Almacenar datos de experimentos de forma permanente en una base de datos

Hasta ahora, hemos estado gestionando los datos de las muestras en un array en el servidor Express. El problema es que, si apagamos y encendemos el servidor, todos los datos desaparecen. Esto se debe a que los arrays solo existen en la memoria.

En un laboratorio, si escribimos los resultados en una nota adhesiva, esta puede volar con el viento, pero si los escribimos en un cuaderno de laboratorio, se conservarán de forma permanente. Una base de datos es el cuaderno de laboratorio del desarrollo web: incluso si el servidor se apaga o la computadora se reinicia, los datos permanecerán seguros.

Archivos vs. bases de datos

Anteriormente, aprendimos cómo leer y escribir archivos CSV con Node.js. Si los archivos también pueden almacenar datos, ¿por qué necesitamos una base de datos?

Archivo (CSV, JSON)Base de datos
BúsquedaLee todo el archivo y filtra manualmenteBusca instantáneamente según las condiciones especificadas
Acceso simultáneoSi varios programas escriben al mismo tiempo, se produce un conflictoManeja el acceso simultáneo de forma segura
Volumen de datosSe vuelve lento con decenas de miles de registrosProcesa rápidamente millones de registros
Aplicación de estructuraPuede almacenar cualquier formato (riesgo de errores)Aplica tipos de columna (INT, VARCHAR, etc.)

Si tienes 10 muestras de experimento, una hoja de cálculo es suficiente. Sin embargo, si quieres encontrar "solo las muestras de sangre registradas en marzo de 2024 con un OD de 1.0 o más" en 100.000 registros de datos de muestra, será una tarea ardua con un archivo, pero con una base de datos, se puede hacer con una sola línea.

SQL: el lenguaje para comunicarse con una base de datos

SQL (Structured Query Language) es el lenguaje que utilizamos para decirle a la base de datos: "dame estos datos", "guarda esto" o "borra esto".

SQL es uno de los lenguajes de programación más fáciles de aprender. Se lee como una frase en inglés:

sql
SELECT name, od FROM samples WHERE status = 'fail';

Esta línea significa "obtener el nombre y el valor de OD de las filas en la tabla 'samples' donde el estado es 'fallido'". Al igual que PubMed busca artículos utilizando combinaciones de palabras clave, SQL busca datos utilizando combinaciones de condiciones.

Tabla: la estructura de los datos

En una base de datos, los datos se almacenan en una tabla. Tiene una estructura similar a una hoja de cálculo de Excel:

text
Tabla samples
┌────┬──────────────┬──────┬────────┬────────────┐
│ id │ name         │ od   │ status │ created_at │
├────┼──────────────┼──────┼────────┼────────────┤
│  1 │ Blood-A      │ 1.85 │ pass   │ 2026-03-01 │
│  2 │ Tissue-B     │ 0.42 │ fail   │ 2026-03-02 │
│  3 │ Serum-C      │ 2.10 │ pass   │ 2026-03-03 │
│  4 │ Plasma-D     │ 0.15 │ fail   │ 2026-03-03 │
└────┴──────────────┴──────┴────────┴────────────┘

Glosario:

  • Fila = Un registro. Toda la información de una muestra.
  • Columna = Un elemento. Tipo de dato como nombre, valor de OD, estado.
  • Esquema = El diseño de la tabla. Qué columnas hay y cuál es el tipo de dato de cada columna.

CRUD: Las 4 operaciones básicas de los datos

El núcleo de todos los sistemas de información es CRUD: crear, leer, actualizar, eliminar. Un LIMS de laboratorio es, en última instancia, una combinación de estas cuatro operaciones.

CREAR: Crear una tabla

sql
CREATE TABLE samples (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  od DECIMAL(5, 2),
  status VARCHAR(10) DEFAULT 'pending',
  created_at DATE
);
  • INT — Entero (id, número de muestra)
  • VARCHAR(100) — Cadena de texto de máximo 100 caracteres (nombre de la muestra)
  • DECIMAL(5, 2) — Número con decimales (valor de OD: 2 decimales)
  • AUTO_INCREMENT — El número se incrementa automáticamente cuando se agrega una nueva fila
  • PRIMARY KEY — Esta columna es el identificador único de cada fila
  • NOT NULL — No se permiten valores vacíos

Es como crear un espacio en el protocolo que diga "Temperatura de reacción: ___°C, tiempo: ___ minutos". Definir la estructura primero ayuda a evitar que se introduzcan datos incorrectos más adelante.

INSERT — Insertar datos

sql
INSERT INTO samples (name, od, status, created_at) VALUES
  ('Blood-A', 1.85, 'pass', '2026-03-01'),
  ('Tissue-B', 0.42, 'fail', '2026-03-02'),
  ('Serum-C', 2.10, 'pass', '2026-03-03');

id es AUTO_INCREMENT, por lo que, aunque no se introduzca manualmente, se asignarán automáticamente los valores 1, 2 y 3.

SELECT — Obtener datos (el comando más utilizado)

sql
-- Consultar todo
SELECT * FROM samples;

-- Solo columnas concretas
SELECT name, od FROM samples;

-- Consulta con una condición
SELECT * FROM samples WHERE status = 'fail';

-- Solo OD mayor o igual que 1.0, ordenado de mayor a menor OD
SELECT name, od FROM samples WHERE od >= 1.0 ORDER BY od DESC;

-- Contar los registros
SELECT COUNT(*) FROM samples WHERE status = 'pass';

La fortaleza de SQL reside en esta combinación de condiciones. No es necesario abrir un archivo y compararlo elemento por elemento con un bucle "for"; simplemente se especifican las condiciones y la base de datos encuentra los datos de la manera más eficiente.

UPDATE — Modificación de datos

sql
-- Actualizar el OD de la muestra con id 2 usando el valor vuelto a medir
UPDATE samples SET od = 0.98, status = 'pass' WHERE id = 2;

Si omite la condición WHERE, se modificarán todas las filas. Es como si, al intentar modificar solo el resultado de una muestra en un cuaderno de laboratorio, se sobrescribiera todo. Asegúrese de verificar WHERE en UPDATE y DELETE.

DELETE — Eliminar datos

sql
-- Eliminar una muestra concreta
DELETE FROM samples WHERE id = 4;

-- Eliminar todas las muestras con estado fail (¡cuidado!)
DELETE FROM samples WHERE status = 'fail';

Base de datos relacional: conexión entre tablas

El nombre "relacional" indica que las tablas pueden establecer relaciones entre sí. Si conectamos la tabla de muestras con la tabla de investigadores:

text
Tabla researchers           Tabla samples
┌────┬──────────┐          ┌────┬──────────┬───────────────┐
│ id │ name     │          │ id │ name     │ researcher_id │
├────┼──────────┤          ├────┼──────────┼───────────────┤
│  1 │ Ana      │◄─────────│  1 │ Blood-A  │             1 │
│  2 │ Carlos   │◄─────────│  2 │ Tissue-B │             2 │
└────┴──────────┘          │  3 │ Serum-C  │             1 │
                           └────┴──────────┴───────────────┘

researcher_id es la clave para conectar las dos tablas. Con esta estructura:

sql
SELECT samples.name, researchers.name
FROM samples
JOIN researchers ON samples.researcher_id = researchers.id
WHERE researchers.name = 'Ana';

"Muestra solo las muestras registradas por el investigador Kim" — Es similar a usar VLOOKUP en Excel, pero funciona en cuestión de segundos, incluso con millones de registros.

¿Qué base de datos usar?

ProductoCaracterísticasSituaciones adecuadas
MySQLLa base de datos de código abierto más utilizadaServicios web (WordPress, la mayoría de los sitios web)
PostgreSQLFunciones avanzadas, fuerte en consultas complejasServicios centrados en el análisis, Supabase
SQLiteNo requiere instalación, un solo archivo es toda la base de datosAplicaciones locales, prototipos, proyectos personales

Proyectos como BioPlayground utilizan Supabase (basado en PostgreSQL). La sintaxis SQL es más del 90% igual tanto en MySQL como en PostgreSQL, por lo que si aprendes una, puedes adaptarte fácilmente a la otra.

¡Pruébalo tú mismo! (Ejemplo atenuado)

Completa los espacios en blanco para completar la consulta SQL para buscar muestras que fallaron en el control de calidad.

Completar espaciossql
name, od
FROM
status = 'fail'
ORDER BY od ;

Errores comunes y soluciones

P: Aparece el error Table 'database.samples' doesn't exist

No ha ejecutado CREATE TABLE o está conectado a una base de datos diferente. Verifique la lista de tablas de la base de datos actual con SHOW TABLES;.

P: Quería modificar solo una fila con UPDATE, pero se modificaron todas

Omitió la condición WHERE. UPDATE samples SET status = 'pass' cambia el estado a "pass" en todas las filas. Asegúrese de agregar una condición como WHERE id = 2. Antes de realizar operaciones importantes, ejecute primero SELECT con la misma condición WHERE para verificar qué filas se verán afectadas.

P: ¿Cuál es la diferencia entre VARCHAR y TEXT?

VARCHAR(100) almacena hasta 100 caracteres y especifica la longitud. TEXT tiene muy pocas restricciones de longitud. Para datos cortos como nombres de muestras o estados, VARCHAR es apropiado; para notas de experimentos o descripciones largas, TEXT es más adecuado.

P: ¿Las sentencias SQL deben estar en mayúsculas?

No. SELECT y select son lo mismo. El uso de mayúsculas es solo una convención. Escribir las palabras clave SQL en mayúsculas y los nombres de tablas/columnas en minúsculas facilita la lectura del código.

P: ¿Existe alguna herramienta GUI para ver MySQL en lugar de la terminal?

Aunque la forma básica de conectarse a MySQL es a través de la terminal con mysql -u root -p, el uso de un cliente GUI permite verificar visualmente la estructura de la tabla y los datos.

HerramientaCaracterísticasPrecio
Sequel AceLigero y rápido. Óptimo para la administración básica de consultas/tablas (solo para Mac)Gratuito
TablePlusInterfaz de usuario elegante. Admite varias bases de datos, como MySQL, PostgreSQL y SQLiteParcialmente gratuito
MySQL WorkbenchHerramienta oficial de MySQL. Tiene muchas funciones, pero es pesadaGratuito

Recomendamos comenzar con Sequel Ace (Mac) o MySQL Workbench (todas las plataformas). Después de familiarizarse con la escritura directa de comandos SQL, puede usar la GUI como ayuda para verificar los datos de un vistazo.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...