Saltar al contenido

Parte 00 — Primeros pasos: del archivo a la base de datos

La rampa de entrada. Qué es un dato, por qué una hoja de cálculo deja de servir, y las primeras órdenes de SQL —crear, insertar, leer, cambiar— hasta llegar a dos tablas relacionadas. Termina con las dos preguntas que hay que saber contestar antes de seguir: cuándo NO hace falta una base de datos y qué familias de motores existen.

10 clases · 20 horas · 46 conceptos · 14 fuentes

Antes de esta parte

Ninguno. Es la puerta de entrada al programa y no supone nada anterior.

De qué trata esta parte

Esta parte existe porque el resto del programa da por sabidas cosas que casi nadie aprendió de forma ordenada. Antes de discutir normalización, aislamiento o consenso hay que poder decir sin dudar qué es un dato, qué es una fila, qué garantiza una clave y por qué una hoja de cálculo deja de servir. Diez clases, veinte horas, y ninguna teoría que no se pueda ejecutar en la misma sesión en que se lee.

El recorrido tiene una forma deliberada. Las tres primeras clases construyen el vocabulario y la primera base de datos real. Las tres siguientes enseñan a leer, a cambiar datos sin destruirlos y a elegir tipos que no mientan. Las dos siguientes introducen la identidad —la clave primaria— y la primera relación entre tablas, que es donde aparecen por primera vez las anomalías que justifican toda la parte 02. Las dos últimas cierran con las dos preguntas de criterio que un profesional debe saber contestar: cuándo NO hace falta una base de datos, y qué familias de motores existen.

El motor de referencia es SQLite, porque no hay que instalar nada ni operar nada y así el ruido no compite con el concepto. Aun así cada clase muestra el mismo problema resuelto en varios motores, incluidos los que no lo resuelven y por qué, para que la costumbre de comparar se instale desde el primer día.

Si ya sabes SQL y quieres ir más rápido, no te saltes las clases 006, 009 y 010: tipos, criterio de decisión y mapa de familias son las tres que más se dan por sabidas y menos se dominan.

Al terminar esta parte podrás

  1. Explicar la diferencia entre dato, información, registro, campo y tabla con un ejemplo propio.
  2. Crear una base de datos, poblarla y consultarla desde cero sin copiar instrucciones.
  3. Cambiar datos comprobando antes el alcance y usando la transacción como red de seguridad.
  4. Elegir el tipo correcto para dinero, fechas e identificadores, y decir qué se rompe con el tipo equivocado.
  5. Declarar claves primarias y foráneas, y justificar la elección entre clave natural y sustituta.
  6. Argumentar cuándo un archivo o un motor embebido es la respuesta correcta y cuándo no.

Las clases, una por una

#ClaseNivelHorasFuentes
001Qué es un dato, un registro y una tablaFundamentos23
002Del archivo y la hoja de cálculo a la base de datosFundamentos23
003Tu primera base de datos: crear, insertar y leerFundamentos23
004Leer datos: SELECT, WHERE y ORDER BYFundamentos23
005Cambiar datos: INSERT, UPDATE, DELETE y el WHERE que salvaFundamentos23
006Tipos de datos: por qué un número no es un textoFundamentos23
007La clave primaria: cómo se distingue una fila de otraFundamentos23
008Dos tablas y una relación: la clave foráneaFundamentos23
009Cuándo NO necesitas una base de datosFundamentos23
010El mapa de los motores: seis familias y un criterioFundamentos23

001 — Qué es un dato, un registro y una tabla

Fundamentos · 2 h · 3 fuentes · sin prerrequisitos

La clase que pone nombre a las tres piezas de las que se habla el resto del programa. Separa el dato de la información que produce al interpretarlo, define el registro como un hecho completo y la tabla como el conjunto de filas que comparten forma. Casi todos los errores de diseño de las partes siguientes empiezan en una confusión de este nivel: un campo que guarda dos hechos, un número guardado como texto, una lista a la que se llama tabla.

dato información registro campo tabla

002 — Del archivo y la hoja de cálculo a la base de datos

Fundamentos · 2 h · 3 fuentes · requiere 001

Por qué llega un momento en que la hoja de cálculo deja de servir, expresado en cuatro capacidades que un archivo no tiene: integridad declarada, concurrencia, consulta declarativa y durabilidad. No es una clase contra las hojas de cálculo —siguen siendo la herramienta correcta muchas veces— sino el primer criterio explícito para saber de qué lado está tu problema.

integridad declarada concurrencia consulta declarativa durabilidad

003 — Tu primera base de datos: crear, insertar y leer

Fundamentos · 2 h · 3 fuentes · requiere 001, 002

La primera base de datos real, creada, poblada y consultada en la misma sesión. Introduce la separación entre definir estructuras y manipular contenido, y la primera aparición del nulo. A partir de aquí todo el programa se puede ejecutar, no solo leer.

CREATE TABLE INSERT SELECT definición frente a manipulación NULL

004 — Leer datos: SELECT, WHERE y ORDER BY

Fundamentos · 2 h · 3 fuentes · requiere 003

Leer con precisión: filtrar filas, elegir columnas y ordenar el resultado. La idea que más consecuencias tendrá después es que el resultado de una consulta no tiene orden hasta que lo declaras, así que `LIMIT` sin `ORDER BY` devuelve filas cualesquiera.

filtrado proyección orden LIMIT IS NULL

005 — Cambiar datos: INSERT, UPDATE, DELETE y el WHERE que salva

Fundamentos · 2 h · 3 fuentes · requiere 003, 004

Las tres órdenes que cambian datos y la disciplina que las hace seguras: comprobar el alcance con un `SELECT` antes de escribir, leer el número de filas afectadas y envolver el cambio en una transacción que se pueda deshacer. Es la clase que evita el `UPDATE` sin `WHERE` que todo el mundo cuenta haber hecho una vez.

UPDATE DELETE alcance del cambio filas afectadas transacción como red

006 — Tipos de datos: por qué un número no es un texto

Fundamentos · 2 h · 3 fuentes · requiere 003

Por qué el tipo de una columna no es burocracia: decide qué comparaciones tienen sentido, qué ordenaciones son correctas y si el dinero se calcula bien. Distingue decimal exacto de coma flotante, fija el formato ISO-8601 para fechas y explica la afinidad de tipos de SQLite, que es la razón de que un dato inválido entre en un motor y sea rechazado en otro.

tipo decimal exacto coma flotante fecha ISO-8601 afinidad de tipos

007 — La clave primaria: cómo se distingue una fila de otra

Fundamentos · 2 h · 3 fuentes · requiere 003, 006

Cómo se distingue una fila de otra. Presenta la clave primaria y el debate entre clave natural y sustituta con su criterio real —cuál de las dos sobrevive a los cambios del mundo— y la clave compuesta, que reaparecerá al hablar de índices y de particionado.

clave primaria clave natural clave sustituta clave compuesta UNIQUE

008 — Dos tablas y una relación: la clave foránea

Fundamentos · 2 h · 3 fuentes · requiere 007

La segunda tabla y el momento en que aparece la relación. La clave foránea convierte una convención en una regla que el motor impone, la tabla intermedia resuelve el muchos-a-muchos y la reunión permite volver a ver el hecho completo. Aquí se ven por primera vez las anomalías que justifican toda la parte 02.

clave foránea tabla de relación reunión anomalías de repetición

009 — Cuándo NO necesitas una base de datos

Fundamentos · 2 h · 3 fuentes · requiere 002, 008

La clase que da permiso para no usar una base de datos. Enumera los casos en que un archivo, un Parquet o un motor embebido es la respuesta correcta, y pone precio a la alternativa: el costo de operación de un motor servidor no aparece en la factura de licencia sino en las guardias, los respaldos y las actualizaciones.

criterio de decisión motor embebido costo de operación alternativas

010 — El mapa de los motores: seis familias y un criterio

Fundamentos · 2 h · 3 fuentes · requiere 009

El mapa que se usará durante todo el programa: seis familias de motores, qué patrón de acceso optimiza cada una y qué paga a cambio. Cierra la rampa de entrada con un criterio de elección en lugar de una lista de nombres de producto.

familias de motores modelo de agregado patrón de acceso multimodelo

Errores frecuentes en esta parte

Cada uno de estos es una creencia habitual y su corrección.

Vocabulario de la parte

Los 46 términos que esta parte introduce. Todos están también en el glosario del programa con sus términos relacionados.

TérminoQué significaSe trabaja en
afinidad de tiposRegla de SQLite por la que la columna sugiere un tipo pero acepta valores de otro y los convierte cuando puede. Explica por qué en SQLite entra un texto en una columna `INTEGER` y por qué ese mismo dato es rechazado en PostgreSQL.006
alcance del cambioCuántas filas toca realmente una orden de escritura. La disciplina es comprobarlo antes: escribir el `SELECT` con el mismo `WHERE`, contar, y solo entonces convertirlo en `UPDATE` o `DELETE`.005
alternativasLo que se usa cuando una base de datos no está justificada: un CSV o un Parquet, un JSON versionado, una hoja de cálculo compartida, un fichero por proceso. Nombrarlas obliga a defender la elección de motor en lugar de darla por hecha.009
anomalías de repeticiónLos tres desastres de guardar el mismo hecho en varios sitios: al insertar hay que repetir datos, al actualizar se corrige una copia y no las otras, y al borrar se pierde información que solo vivía ahí. Son el argumento original de la normalización.008
campoUna columna: un dato con nombre, tipo y —a veces— una regla. El nombre dice qué significa, el tipo dice qué valores son posibles y la restricción dice cuáles son admisibles.001
clave compuestaClave primaria formada por dos o más columnas, típica de las tablas de relación: `(estudiante_id, curso_id)`. Fija además el orden de las columnas del índice que la sostiene, y ese orden decide qué consultas se aceleran.007
clave foráneaColumna que referencia la clave primaria de otra tabla y a la que el gestor obliga a apuntar a una fila existente. Es la integridad referencial hecha declaración: sin ella, las relaciones son una convención que alguien acabará rompiendo.008
clave naturalIdentificador que ya existe en el dominio —RUT, ISBN, matrícula—. Ventaja: significa algo. Riesgo: el mundo la cambia —una persona corrige su documento, un organismo reasigna códigos— y el cambio arrastra a todas las filas que la referencian.007
clave primariaLa clave candidata elegida para identificar cada fila: única, no nula y estable en el tiempo. Es la dirección por la que el resto del esquema se referirá a esa fila.007
clave sustitutaIdentificador inventado por el sistema y sin significado externo: entero autoincremental, UUID. No cambia nunca porque no depende del mundo, a costa de necesitar además una restricción `UNIQUE` sobre la clave natural real.007
coma flotanteRepresentación binaria aproximada (`REAL`, `DOUBLE`) según IEEE 754. Rápida y adecuada para magnitudes físicas, ruinosa para dinero: `0.1 + 0.2` no da `0.3` y la diferencia se acumula fila a fila.006
concurrenciaVarias sesiones leyendo y escribiendo a la vez sobre los mismos datos. Un archivo compartido no la resuelve: el último en guardar pisa al anterior. Un gestor la resuelve con transacciones, bloqueo o versiones.002
consulta declarativaSe declara *qué* resultado se quiere y el motor decide *cómo* obtenerlo. Quien consulta no escribe recorridos ni bucles; el optimizador elige el plan y puede cambiarlo cuando cambian los datos, sin que nadie reescriba la consulta.002
costo de operaciónTodo lo que cuesta mantener vivo un motor después de instalarlo: respaldos probados, actualizaciones, monitorización, personas de guardia. Suele superar con creces el costo de licencia o de cómputo.009
CREATE TABLELa orden que declara una tabla: columnas, tipos y restricciones. Es el contrato; a partir de ahí el motor rechaza todo lo que no lo cumpla, venga de donde venga.003
criterio de decisiónLa regla explícita por la que se elige —o se descarta— una tecnología: volumen, concurrencia, garantías necesarias y costo de operación. Sin criterio escrito, la elección se justifica a posteriori y ya no se puede revisar.009
datoUn valor registrado sin el contexto que lo interpreta: `38`, `Ada`, `2026-03-01`. Por sí solo no afirma nada, porque el mismo valor puede ser una edad, una temperatura o un número de camiseta. Toda base de datos existe para guardar el dato junto al contexto que lo convierte en información.001
decimal exactoTipo numérico de precisión y escala fijas (`NUMERIC`, `DECIMAL`) que representa exactamente los valores decimales. Es el tipo del dinero: no arrastra el error de representación binaria de la coma flotante.006
definición frente a manipulaciónSQL se separa en DDL, que define y cambia estructuras (`CREATE`, `ALTER`, `DROP`), y DML, que consulta y cambia contenido (`SELECT`, `INSERT`, `UPDATE`, `DELETE`). La distinción importa porque no todos los motores dan al DDL las mismas garantías transaccionales.003
DELETEBorra las filas que cumplen el `WHERE`. Igual que `UPDATE`, sin `WHERE` alcanza a toda la tabla; a diferencia de `DROP`, deja la estructura en pie.005
durabilidadUna vez confirmada la transacción, su efecto sobrevive a un corte de luz. Se consigue escribiendo el cambio en un registro secuencial y forzándolo al disco antes de responder «hecho».002
familias de motoresLas formas de organizar datos que estructuran este programa: relacional, documental, clave-valor, grafo, columnas anchas y series temporales, más los índices de búsqueda y los vectoriales como casos especializados. Cada familia optimiza un patrón de acceso y paga en los demás.010
fecha ISO-8601El formato `AAAA-MM-DD` —y `AAAA-MM-DDTHH:MM:SSZ` con hora— que ordena alfabéticamente igual que cronológicamente y no es ambiguo entre día y mes. Guardar fechas como texto libre es la vía directa a datos que no se pueden comparar.006
filas afectadasEl número que el motor devuelve tras una escritura. Es la evidencia de que el cambio alcanzó lo previsto: si esperabas una fila y salieron cuatro mil, el `WHERE` estaba mal.005
filtradoQuedarse con las filas que cumplen un predicado (`WHERE`). En álgebra relacional es la selección: reduce el número de filas, nunca el de columnas.004
informaciónEl dato más el contexto que fija su significado: de qué es, de cuándo y de quién. «38» es un dato; «la temperatura del sensor 3 a las 10:15 fue 38 °C» es información. Diseñar un esquema es, literalmente, decidir qué contexto se guarda y cuál se pierde para siempre.001
INSERTLa orden que añade filas. Falla —y debe fallar— si la fila viola una restricción declarada: es el momento en que la integridad declarada demuestra que sirve para algo.003
integridad declaradaLas reglas del dominio escritas en el esquema —`NOT NULL`, `UNIQUE`, `CHECK`, clave foránea— para que el gestor las imponga a toda aplicación que escriba, no solo a la que recordó comprobarlas. Es la diferencia entre una regla y una esperanza.002
IS NULLEl único predicado que comprueba ausencia de valor. `= NULL` nunca es cierto —da `UNKNOWN`— porque nada, ni siquiera otro nulo, es igual a lo desconocido.004
LIMITCorta el resultado a las primeras N filas. Sin `ORDER BY` no significa nada estable: «las primeras N» sin criterio de orden es «N cualesquiera».004
modelo de agregadoCómo agrupa el motor los datos que lee y escribe de una vez. El relacional trabaja con filas que se recomponen por reunión; los motores de agregado guardan la unidad completa junta y evitan la reunión, a cambio de duplicar.010
motor embebidoBase de datos que corre dentro del proceso de la aplicación, sin servidor ni puerto: SQLite, DuckDB. Elimina el costo de operación y la latencia de red, a cambio de no poder servir a varias máquinas.009
multimodeloMotor que soporta varias familias a la vez —PostgreSQL con JSONB, vectores y búsqueda de texto—. Reduce el número de sistemas que hay que operar; el riesgo es dar por hecho que hacer varias cosas equivale a hacerlas todas bien.010
NULLMarca de ausencia de valor: no es cero, ni cadena vacía, ni «desconocido» codificado a mano. Introduce una lógica de tres valores que cambia el resultado de comparaciones, agregados y `NOT IN`.003
ordenEl resultado de una consulta es un conjunto: no tiene orden hasta que se declara `ORDER BY`. Confiar en el orden «que salió» es un error que sobrevive en pruebas y falla en producción el día que cambia el plan.004
patrón de accesoLa lista concreta de consultas y escrituras que el sistema tendrá que servir, con su frecuencia y su latencia aceptable. Es el dato de entrada del diseño: sin él, elegir modelo o índice es adivinar.010
proyecciónQuedarse con un subconjunto de columnas. Reduce el ancho de la fila, no su cantidad —salvo que se eliminen los duplicados resultantes con `DISTINCT`, cosa que SQL no hace por defecto y el álgebra sí.004
registroUna fila: un hecho completo sobre una cosa, ni medio hecho ni dos. La regla práctica para detectar el error más común: si para leer un campo hay que partirlo por comas, ese registro esconde varios hechos y viola la primera forma normal.001
reuniónCombinar filas de dos tablas emparejándolas por un valor común, normalmente clave foránea contra clave primaria. Es la operación que permite normalizar sin perder la capacidad de ver el hecho completo.008
SELECTLa orden de lectura. Nunca modifica datos; describe el conjunto que se quiere y deja al motor la estrategia para producirlo.003
tablaUn conjunto de registros con exactamente la misma forma: mismas columnas, mismos tipos, mismo significado por columna. Esa uniformidad es lo que permite consultar sin saber de antemano qué hay dentro.001
tabla de relaciónTabla intermedia que resuelve una relación muchos-a-muchos guardando pares de claves foráneas. Deja de ser «solo técnica» en cuanto la relación tiene atributos propios —fecha de inscripción, nota— y pasa a ser una entidad de pleno derecho.008
tipoEl conjunto de valores posibles de un campo más las operaciones válidas sobre ellos. Declarar el tipo correcto delega en el motor la mitad de las validaciones que, si no, hay que escribir a mano en cada aplicación.006
transacción como redEnvolver un cambio en `BEGIN` … `ROLLBACK` permite ver su efecto y deshacerlo. Es la red de seguridad más barata que existe y la razón práctica de que un `UPDATE` sin transacción sea una apuesta.005
UNIQUERestricción que prohíbe valores repetidos en una columna o combinación de columnas. A diferencia de la clave primaria admite nulos —y cuántos admite depende del motor, que es una de las divergencias clásicas entre dialectos.007
UPDATECambia valores de las filas que cumplen el `WHERE`. Sin `WHERE` cambia todas: es la orden que más datos ha destruido en la historia de las bases de datos.005

Fuentes usadas en esta parte

14 obras distintas sostienen lo que se afirma en estas 10 clases.

Otras partes