Bloque II · Tema 5 · Cuerpo de Técnicos Auxiliares de Informática
Así lo numera la convocatoria: Bloque II. Tecnología básica. En nuestro temario es el tema 14 de 33.
Sistemas de gestión de bases de datos relacionales, orientados a objetos y NoSQL: características y componentes.
Uno de los dos temas que más pesan del bloque II, con cuatro preguntas propias y 148 del corpus oficial. Va con el vocabulario de Métrica v3 LITERAL, porque es donde este tribunal separa a quien ha leído la metodología de quien ha leído un resumen: en Métrica, cardinalidad y tipo de correspondencia NO son sinónimos. Con el modelo relacional y las doce reglas de Codd, la normalización hasta la 5FN, SQL contra la norma ISO/IEC 9075 y sus once partes activas, transacciones y niveles de aislamiento, bases de datos orientadas a objetos con ODMG 3.0, y la taxonomía NoSQL con sus productos, sus lenguajes y sus puertos.
Tema desarrollado para el ejercicio único del Cuerpo de Técnicos Auxiliares de Informática de la Administración del Estado. Es el tema 5 del bloque II «Tecnología básica», que en nuestra numeración interna es el tema 14 de 33.
Cuánto pesa y cómo pregunta. De las catorce preguntas del bloque II, este tema y el de periféricos son los que más se llevan: cuatro cada uno. Y, como el de sistemas operativos, desborda su casilla: cruzando su enunciado con el corpus del INAP aparecen 148 preguntas oficiales, porque las bases de datos vuelven en el bloque III (lenguajes de interrogación, diseño, ORM) y en el IV (administración), y porque casi todos los supuestos prácticos llevan dentro un modelo de datos y tres o cuatro sentencias SQL.
Aquí el tribunal es especialmente puntilloso con el vocabulario, y conviene saber por qué: pregunta con los términos de Métrica versión 3, la metodología de planificación y desarrollo de sistemas de información del Consejo Superior de Administración Electrónica, que en algunos puntos define las palabras de forma distinta a como las usa el manual universitario medio. El caso capital: en Métrica v3, cardinalidad y tipo de correspondencia no son sinónimos, y quien los intercambie falla las dos preguntas que ha puesto sobre ello. Este apunte trae esas definiciones literales, y avisa cada vez que el término oficial se aparta del uso corriente.
El resto de su firma: cita la norma o el producto por su número exacto —ISO/IEC 9075, el puerto TCP 1433, los cuatro tipos de driver JDBC, las doce reglas de Codd—, pone SQL literal en las opciones con una coma o una cláusula cambiada, y usa mucho el enunciado en negativo.
Índice
- Bases de datos y sistemas gestores
- El modelo relacional
- Diseño de bases de datos
- SQL
- Transacciones, concurrencia y recuperación
- Bases de datos orientadas a objetos
- Bases de datos NoSQL
- Seguridad en bases de datos
- Conectividad, explotación y puertos
- Lo que ya ha preguntado el tribunal
1. Bases de datos y sistemas gestores
1.1. De los ficheros a la base de datos
Una base de datos es un conjunto de datos interrelacionados, almacenados con redundancia controlada e independientes de los programas que los usan, organizados de forma que sirvan a varias aplicaciones a la vez. Un sistema de gestión de bases de datos (SGBD; en inglés DBMS) es el software que permite definir, construir, manipular y compartir esa base de datos controlando el acceso.
Nacen para resolver los males del almacenamiento en ficheros clásicos, que conviene saber enumerar porque son el reverso de las ventajas del SGBD:
| Problema del sistema de ficheros | Lo que aporta el SGBD |
|---|---|
| Redundancia e inconsistencia: el mismo dato repetido en varios ficheros, actualizado en unos y no en otros. | Integración de los datos y redundancia controlada: solo se duplica lo que se decide duplicar, y el sistema mantiene la coherencia. |
| Dependencia física de los programas: cambiar el formato del fichero obliga a recompilar las aplicaciones. | Independencia de datos, física y lógica. |
| Dificultad de acceso: cada consulta nueva exige un programa nuevo. | Lenguaje de consulta declarativo y no procedimental. |
| Problemas de integridad y de acceso concurrente. | Restricciones declarativas, transacciones y control de concurrencia. |
| Seguridad todo o nada, a nivel de fichero. | Autorizaciones por objeto, por operación y hasta por columna. |
El precio: un SGBD es caro, complejo y concentra el riesgo —si cae, cae todo—, y añade una capa de indirección que penaliza el rendimiento frente al acceso directo a fichero.
1.2. La arquitectura ANSI/SPARC y la independencia de datos
La propuesta del comité ANSI/X3/SPARC (1975) es la referencia obligada, y el tribunal la ha preguntado. Define tres niveles de abstracción:
| Nivel | Qué contiene | Otros nombres |
|---|---|---|
| Externo | Las vistas de cada tipo de usuario o aplicación: cada uno ve solo la parte del esquema que le interesa, y puede verla con otra estructura. Hay tantos esquemas externos como grupos de usuarios. | Nivel de vistas |
| Conceptual | La descripción completa y única de qué datos hay y cómo se relacionan, sin decir cómo se guardan. Es el esquema de la organización entera. | Nivel lógico |
| Interno | Cómo se almacenan realmente los datos: ficheros, registros, métodos de acceso, índices, compresión, cifrado. | Nivel físico |
⚠️ Dos precisiones que se preguntan y se confunden: el sinónimo de «nivel lógico» es el CONCEPTUAL, no el interno; y no existe ningún «nivel contextual». El único nivel del que hay uno solo son el conceptual y el interno; externos hay tantos como haga falta.
De la separación entre niveles salen las dos independencias:
- Independencia física: se puede cambiar el nivel interno —añadir un índice, mover un fichero, cambiar el método de acceso— sin tocar el esquema conceptual ni las aplicaciones.
- Independencia lógica: se puede cambiar el esquema conceptual —añadir un atributo, partir una tabla— sin reescribir los esquemas externos ya existentes. Es la más difícil de conseguir y la que menos SGBD logran del todo.
1.3. Componentes de un SGBD
- Motor o núcleo de almacenamiento: gestiona ficheros, páginas, extensiones y el buffer pool (la caché de páginas en memoria).
- Procesador de consultas: analizador sintáctico y semántico, optimizador —que decide el plan de ejecución, normalmente basado en costes a partir de estadísticas— y motor de ejecución.
- Gestor de transacciones, gestor de bloqueos y gestor de recuperación, con el registro de transacciones (log, redo log en Oracle, transaction log en SQL Server, WAL en PostgreSQL).
- Diccionario de datos o catálogo: los metadatos —qué tablas, columnas, tipos, restricciones, usuarios y privilegios hay—. En la norma se expone como el esquema de información INFORMATION_SCHEMA; en Oracle son las vistas del diccionario (USER_, ALL_, DBA_); en SQL Server, las vistas de catálogo sys..
- Gestor de seguridad y de autorizaciones, y utilidades de copia, restauración, carga masiva y monitorización.
Alrededor del sistema están los papeles humanos: el administrador de la base de datos (DBA), que define el esquema físico, la seguridad y las copias; el administrador de datos, responsable del contenido y de la política de datos; los diseñadores; y los usuarios finales.
1.4. Los sublenguajes: DDL, DML, DQL, DCL y TCL
SQL no es un lenguaje monolítico: se agrupa en sublenguajes, y el tribunal pregunta a cuál pertenece una sentencia concreta. Esta tabla es la que hay que llevar aprendida.
| Sublenguaje | Para qué | Sentencias |
|---|---|---|
| DDL Data Definition Language | Definir y modificar la estructura de los objetos. | CREATE, ALTER, DROP, TRUNCATE, RENAME, COMMENT |
| DML Data Manipulation Language | Manipular los datos de las tablas. | INSERT, UPDATE, DELETE, MERGE y —en la clasificación que usa el tribunal— SELECT |
| DQL Data Query Language | Consultar. Muchos autores separan aquí el SELECT; otros lo dejan en DML. | SELECT |
| DCL Data Control Language | Conceder y retirar privilegios. | GRANT, REVOKE y, en Transact-SQL, DENY |
| TCL Transaction Control Language | Delimitar y cerrar transacciones. | COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION |
⚠️ Los tres puntos exactos donde el tribunal ha construido la trampa:
- SELECT lo da por DML. Si en las opciones aparece DQL como categoría propia, hay que leer el enunciado: cuando pregunta «¿es DML?» por SELECT, la respuesta que da por buena es que sí.
- TRUNCATE es DDL, no DML. Borra todas las filas, pero lo hace desasignando páginas, sin registrar fila a fila, no admite WHERE y normalmente no se puede deshacer con ROLLBACK. Afirmar que es DML es falso.
- DENY es DCL, y es propio de Transact-SQL: la norma solo tiene GRANT y REVOKE. DENY es más fuerte que la ausencia de permiso, porque prevalece sobre cualquier GRANT recibido por pertenencia a un rol.
2. El modelo relacional
2.1. Codd y sus doce reglas
El modelo relacional lo formuló Edgar Frank Codd, de IBM, en 1970 («A Relational Model of Data for Large Shared Data Banks»). En 1985 publicó las doce reglas que, a su juicio, debe cumplir un sistema para llamarse relacional —en realidad son trece, porque van precedidas de una regla 0 o regla fundamental: para ser relacional, el sistema debe gestionar la base de datos enteramente a través de sus capacidades relacionales—.
| Regla | Enunciado |
|---|---|
| 1. De la información | Toda la información se representa de un solo modo: valores en columnas dentro de filas de tablas. |
| 2. Del acceso garantizado | Todo dato es accesible por la combinación de nombre de tabla, valor de clave primaria y nombre de columna. |
| 3. Del tratamiento sistemático de los nulos | Debe existir una representación de valores desconocidos y no aplicables, distinta de cualquier valor normal y del cero o la cadena vacía. |
| 4. Del catálogo dinámico en línea | El diccionario de datos se describe a sí mismo con el modelo relacional y se consulta con el mismo lenguaje. |
| 5. Del sublenguaje completo de datos | Debe haber al menos un lenguaje que cubra definición, manipulación, integridad, autorizaciones y transacciones. |
| 6. De la actualización de vistas | Toda vista teóricamente actualizable debe poder actualizarse. |
| 7. De la inserción, actualización y borrado de alto nivel | Las operaciones actúan sobre conjuntos de filas, no fila a fila. |
| 8. De la independencia física | Cambiar el almacenamiento o los métodos de acceso no afecta a las aplicaciones. |
| 9. De la independencia lógica | Los cambios en las tablas que preserven la información no afectan a las aplicaciones. |
| 10. De la independencia de la integridad | Las restricciones se definen en el catálogo, no en los programas. |
| 11. De la independencia de la distribución | Que la base de datos esté distribuida en varios servidores NO debe afectar al uso ni a la programación. |
| 12. De la no subversión | Si hay una interfaz de bajo nivel, no puede usarse para saltarse las restricciones de integridad o de seguridad. |
⚠️ La regla 11 es la que el tribunal invirtió para construir un distractor: escribió «dependencia de la distribución… afecta al uso de la misma y a la programación». Es exactamente lo contrario de lo que dice Codd, y por eso era la opción que no se corresponde con las doce reglas.
2.2. Relación, tupla, dominio, grado y cardinalidad
El modelo relacional tiene un vocabulario formal y otro coloquial, y hay que manejar los dos porque el enunciado salta de uno a otro:
| Término formal | Término coloquial | Definición |
|---|---|---|
| Relación | Tabla | Conjunto de tuplas con la misma estructura. Es un conjunto: no hay orden ni duplicados. |
| Tupla | Fila o registro | Cada elemento de la relación. |
| Atributo | Columna o campo | Cada propiedad, definida sobre un dominio. |
| Dominio | Tipo de dato | Conjunto válido de valores que puede tomar un atributo. |
| Grado | — | Número de ATRIBUTOS (columnas) de la relación. |
| Cardinalidad | — | Número de TUPLAS (filas) de la relación. |
De ahí sale una pregunta que ha caído en los dos modelos de 2026 y que se contesta en un segundo si no se confunden los dos números: en una tabla con 4 columnas y 7 filas, el grado es 4 y la cardinalidad 7. Regla para no dudar: el grado va con las columnas por descarte, porque la cardinalidad es la que cuenta casos, es decir, filas.
⚠️ Y ojo, porque esta «cardinalidad» —la del modelo relacional, número de filas— no es la misma «cardinalidad» del modelo entidad/relación, que se ve en el apartado 3.1 y significa otra cosa. Son dos palabras iguales en dos modelos distintos.
Una relación tiene además tres propiedades que se preguntan como afirmaciones falsas: no hay tuplas duplicadas, el orden de las tuplas es irrelevante y el orden de los atributos es irrelevante. Y cada valor es atómico: un solo valor del dominio, ni listas ni grupos repetitivos.
2.3. Claves e integridad
| Clave | Definición exacta |
|---|---|
| Superclave | Cualquier conjunto de atributos que identifica unívocamente cada tupla. No exige ser mínimo: la tabla entera es siempre una superclave. |
| Clave candidata | Superclave mínima: identifica unívocamente y ningún subconjunto propio suyo lo hace. La minimalidad es lo que la distingue de la superclave. |
| Clave primaria | La clave candidata elegida por el diseñador. Campo o combinación de campos que identifica de forma única cada fila. No admite nulos. |
| Clave alternativa | Las candidatas que no fueron elegidas como primaria. |
| Clave ajena, foránea o externa (foreign key) | Columna o grupo de columnas cuyos valores coinciden con la clave primaria de otra tabla (o de la misma, en una relación reflexiva). Es la que materializa las relaciones. |
Sobre ellas descansan las reglas de integridad:
- Integridad de entidad: ningún atributo de la clave primaria puede ser nulo.
- Integridad referencial: todo valor de una clave ajena debe existir como valor de la clave primaria referenciada, o ser enteramente nulo. Al borrar o modificar la fila referenciada, el SGBD aplica la acción declarada: NO ACTION o RESTRICT (rechaza), CASCADE (propaga), SET NULL o SET DEFAULT.
- Integridad de dominio: cada valor pertenece al dominio de su atributo. Se declara con el tipo, con NOT NULL y con restricciones CHECK.
- Restricciones de usuario o semánticas: reglas de negocio, con CHECK, aserciones o disparadores.
2.4. Álgebra relacional
El álgebra relacional es el conjunto de operaciones cerradas —el resultado de operar relaciones es otra relación— que da fundamento a SQL. Se divide en dos grupos:
| Operación | Grupo | Qué hace | Equivalente en SQL |
|---|---|---|---|
| Selección (σ) | Propia del modelo | Elige las filas que cumplen una condición. | WHERE |
| Proyección (π) | Propia | Elige las columnas, eliminando duplicados. | SELECT DISTINCT |
| Combinación o reunión (⋈) | Propia | Enlaza dos relaciones por una condición sobre atributos. | JOIN |
| División (÷) | Propia | Devuelve las filas relacionadas con todas las de otra relación. | NOT EXISTS anidado |
| Unión (∪) | De conjuntos | Filas de una u otra; exige compatibilidad de esquemas. | UNION |
| Intersección (∩) | De conjuntos | Filas presentes en las dos. | INTERSECT |
| Diferencia (−) | De conjuntos | Filas de la primera que no están en la segunda. | EXCEPT (MINUS en Oracle) |
| Producto cartesiano (×) | De conjuntos | Todas las combinaciones de filas. | CROSS JOIN |
Junto al álgebra, que es procedimental (dice cómo obtener el resultado), está el cálculo relacional, que es declarativo (describe qué se quiere) y tiene dos variantes, orientado a tuplas y orientado a dominios. SQL se parece más al cálculo que al álgebra, y ambos tienen la misma potencia expresiva: es lo que se llama completitud relacional.
3. Diseño de bases de datos
El diseño va en tres fases, y cada una produce un esquema: conceptual (independiente del SGBD, el modelo E/R), lógico (ya en el modelo del SGBD elegido, aquí el relacional) y físico (estructuras de almacenamiento, índices, particiones).
3.1. El modelo E/R extendido según Métrica v3
Métrica v3 es la metodología de la Administración General del Estado, y sus definiciones son literalmente las que el tribunal pone en las opciones. Van tal cual:
| Término | Definición de Métrica v3, literal |
|---|---|
| Entidad | «Es aquel objeto, real o abstracto, acerca del cual se desea almacenar información en la base de datos.» |
| Relación | «Es una asociación o correspondencia existente entre una o varias entidades.» |
| Atributo | «Es una propiedad o característica de un tipo de entidad. Se trata de la unidad básica de información que sirve para identificar o describir la entidad.» |
| Dominio | «Es un conjunto nominado de valores homogéneos. El dominio tiene existencia propia con independencia de cualquier entidad, relación o atributo.» |
| Cardinalidad | «Representa la participación en la relación de cada una de las entidades afectadas, es decir, el número máximo y mínimo de ocurrencias de un tipo de entidad que pueden estar interrelacionadas con una ocurrencia de otro tipo de entidad.» |
| Tipo de correspondencia | «Es el número máximo de ocurrencias de cada tipo de entidad que pueden intervenir en una ocurrencia de la relación.» |
| Identificador principal | Conjunto mínimo de atributos que identifica unívocamente cada ocurrencia del tipo de entidad. |
| Generalización | «Permite abstraer un tipo de entidad de nivel superior (supertipo) a partir de varios tipos de entidad (subtipos).» La especialización es la operación inversa. |
| Agregación | «Consiste en construir un nuevo tipo de entidad como composición de otros y su tipo de relación.» |
🚨 Los cuatro puntos donde este tribunal ha cazado a la gente, y merecen leerse dos veces:
- Cardinalidad NO es tipo de correspondencia. La cardinalidad es la participación —el par (mínimo, máximo)— de cada entidad; el tipo de correspondencia es solo el máximo, y es lo que se etiqueta en el rombo como 1:1, 1:N o N:M. Dicho de otro modo: la cardinalidad máxima coincide con el tipo de correspondencia, pero la cardinalidad además lleva el mínimo, que es el que dice si la participación es obligatoria (mínimo 1) u opcional (mínimo 0). En el examen han preguntado las dos definiciones por separado y en años distintos.
- El dominio TIENE existencia propia, con independencia de entidades, relaciones y atributos. La opción que dice que «depende de las entidades» es falsa por esa palabra.
- Un atributo se define sobre UN dominio, no «sobre diversos dominios». Un mismo dominio, en cambio, sí puede servir a muchos atributos.
- La entidad débil es la que no puede identificarse sin la entidad fuerte de la que depende. Se distingue la dependencia en existencia (si desaparece la fuerte, desaparece la débil) de la dependencia en identificación (además necesita su identificador para identificarse).
3.2. La notación gráfica, y la trampa de mezclarla
Métrica v3 dibuja las entidades como rectángulos —dos rectángulos concéntricos si son débiles—, las relaciones como rombos unidos por líneas y etiquetados con el tipo de correspondencia, y los atributos como elipses. El identificador principal aparece subrayado o con su círculo en negro.
Pero el tribunal también pregunta por la notación clásica de Chen, que es la de los manuales y que Métrica no recoge entera. Conviene tener las dos, y saber que son notaciones distintas:
| Símbolo | Significado |
|---|---|
| Elipse simple | Atributo normal. |
| Elipse con el nombre subrayado | Atributo identificador (clave). |
| Doble elipse | Atributo multivaluado: admite varios valores por ocurrencia (los teléfonos de una persona). |
| Elipse de la que cuelgan otras | Atributo compuesto: se descompone en partes con significado propio (dirección = calle, número, población). |
| Elipse discontinua o punteada | Atributo derivado o calculado: no se almacena, se obtiene de otros (la edad a partir de la fecha de nacimiento; el importe total a partir de las líneas de un pedido). |
La elipse discontinua ha caído en los dos modelos de 2026 con las mismas cuatro opciones —clave primaria, compuesto, multivaluado y derivado—, así que las cuatro hay que distinguirlas de memoria.
3.3. Paso del modelo E/R al relacional
Las reglas de transformación son mecánicas y se preguntan:
- Cada tipo de entidad pasa a ser una tabla; sus atributos, columnas; su identificador principal, la clave primaria.
- Una relación de tipo de correspondencia 1:N no genera tabla: la clave primaria del lado «1» viaja como clave ajena al lado «N». Si la participación del lado N es obligatoria, esa columna será NOT NULL.
- Una relación N:M genera siempre una tabla nueva, cuya clave primaria es la concatenación de las claves de las dos entidades, más los atributos propios de la relación.
- Una relación 1:1 se resuelve propagando la clave a cualquiera de los dos lados —preferiblemente al de participación obligatoria— o fusionando las dos entidades si ambas participaciones son obligatorias.
- Un atributo multivaluado genera una tabla aparte, porque el modelo relacional exige valores atómicos.
- Una entidad débil hereda como parte de su clave primaria la clave de la entidad fuerte.
- Una jerarquía de generalización admite tres soluciones: una tabla por el supertipo con todos los atributos y un discriminador; una tabla por cada subtipo; o tabla del supertipo más una por subtipo.
3.4. Normalización
Normalizar es descomponer las relaciones para eliminar redundancias y las anomalías de inserción, borrado y modificación, sin perder información ni dependencias. Se apoya en las dependencias funcionales, cuya definición Métrica v3 da así, y que el tribunal ha copiado literal:
«Un atributo Y se dice que depende funcionalmente de otro X si, y sólo si, a cada valor de X le corresponde un único valor de Y.» Se escribe X → Y y se dice que X es el determinante.
Y sus dos variantes, que son las que se confunden:
- Dependencia funcional completa: Y depende de X en su totalidad, es decir, no depende de ninguno de los posibles subconjuntos propios de X. Solo tiene sentido cuando X es compuesto.
- Dependencia funcional transitiva: X → Y, Y → Z y por tanto X → Z, a través de otro atributo. Ojo: la definición «depende de él a través de otro atributo» es la de la dependencia transitiva; el tribunal la ha puesto como falsa definición de «dependencia funcional completa» y como falsa definición de «dependencia funcional» a secas.
| Forma normal | Condición |
|---|---|
| 1FN | Todos los atributos son atómicos: NO hay grupos repetitivos ni atributos que tomen varios valores. ⚠️ Decir que «está en 1FN si tiene grupos repetitivos» es exactamente lo contrario, y es la falsedad que el tribunal repitió en tres exámenes. |
| 2FN | Está en 1FN y todos los atributos que no forman parte de las claves candidatas tienen dependencia funcional COMPLETA respecto de éstas. Elimina las dependencias parciales; solo puede fallar si la clave es compuesta. |
| 3FN | Está en 2FN y no existe ninguna dependencia transitiva de atributos no principales respecto de las claves. |
| FNBC (Boyce-Codd) | Está en 3FN y todo determinante es una clave candidata. Es más estricta que la 3FN y solo se distingue de ella cuando hay varias claves candidatas compuestas y solapadas. |
| 4FN | Está en FNBC y no hay dependencias multivaluadas no triviales que no procedan de una clave candidata. |
| 5FN o de proyección-reunión | Está en 4FN y no hay dependencias de reunión (join) no triviales que no se generen desde las claves candidatas. |
Las formas normales son acumulativas y anidadas: toda relación en 3FN está también en 2FN y en 1FN. Afirmar que «una relación en 3FN estará también en 2FN, pero no en 1FN» es imposible por construcción, y es otro distractor que el tribunal ha usado tres veces.
3.5. Diseño físico y desnormalización
El esquema normalizado es correcto, pero puede ser lento: cada consulta necesita reunir varias tablas. En el modelo físico se toman decisiones que sacrifican pureza a cambio de rendimiento:
- Índices: estructuras auxiliares que aceleran la búsqueda a costa de espacio y de penalizar las escrituras. Los habituales son de árbol B+; también los hay hash, de mapa de bits (eficaces en columnas de baja cardinalidad, típicas del almacén de datos) y de texto completo. Un índice agrupado (clustered) ordena físicamente la tabla, así que solo puede haber uno.
- Particionamiento horizontal (por rangos de filas) o vertical (por columnas).
- Vistas materializadas, que guardan el resultado precalculado.
- Desnormalización: Métrica v3 lo llama, con todas las letras, «introducir elementos redundantes», y es la técnica que su capítulo de «Técnicas y prácticas» propone cuando se quiere reducir o simplificar el número de accesos. Es la respuesta que el tribunal ha dado por buena en tres exámenes: no es «eliminar entidades» ni «normalizar en FNBC» —que multiplicaría los accesos, justo lo contrario de lo buscado—.
4. SQL
4.1. La norma ISO/IEC 9075 y sus partes
SQL (Structured Query Language) nació en IBM como SEQUEL, lo normalizó ANSI en 1986 e ISO en 1987, y hoy es la norma ISO/IEC 9075. Sus ediciones sucesivas: SQL-86, SQL-89, SQL-92 (la que todavía se cita como «SQL estándar»), SQL:1999 (que trajo los disparadores, la recursividad y las extensiones objeto-relacionales), SQL:2003 (XML y funciones de ventana), SQL:2006, SQL:2008, SQL:2011 (datos temporales), SQL:2016 (JSON y reconocimiento de patrones) y SQL:2023, adoptada formalmente en junio de 2023, que es la novena edición y añadió el tipo de dato JSON y una parte enteramente nueva.
La norma está dividida en partes, de las que once están activas:
| Parte | Nombre | De qué trata |
|---|---|---|
| 1 | SQL/Framework | Marco general y conceptos comunes. |
| 2 | SQL/Foundation | El lenguaje propiamente dicho. Es la parte grande y la única imprescindible. |
| 3 | SQL/CLI | Interfaz de nivel de llamada, base de ODBC. |
| 4 | SQL/PSM | Módulos almacenados persistentes: procedimientos, funciones y control de flujo. |
| 9 | SQL/MED | Gestión de datos externos. |
| 10 | SQL/OLB | Enlace con lenguajes objeto (SQLJ). |
| 11 | SQL/Schemata | Esquemas de información y definición. |
| 13 | SQL/JRT | Rutinas y tipos usando Java. |
| 14 | SQL/XML | Especificaciones relacionadas con XML. |
| 15 | SQL/MDA | Matrices multidimensionales. |
| 16 | SQL/PGQ | Consultas sobre grafos de propiedades. Es la novedad de SQL:2023 y acerca el mundo relacional al de las bases de datos de grafos. |
Las partes 6, 7, 8 y 12 se proyectaron y nunca llegaron a publicarse; la 5 se fundió en la parte 2 con SQL:2003. En la práctica, solo tres partes tienen implantación amplia: la 2, la 11 y la 14.
4.2. DDL: definición de datos
La creación de una tabla lleva, en la misma sentencia, los tipos y las restricciones:
CREATE TABLE Alumno (
id_alumno INT NOT NULL PRIMARY KEY,
dni CHAR(9) NOT NULL UNIQUE,
nombre VARCHAR(50) NOT NULL,
fecha_alta DATE DEFAULT CURRENT_DATE,
id_centro INT REFERENCES Centro(id_centro)
ON DELETE SET NULL,
CONSTRAINT ck_nombre CHECK (LENGTH(nombre) > 1)
);
Las restricciones declarables son PRIMARY KEY, FOREIGN KEY … REFERENCES, UNIQUE, NOT NULL, CHECK y DEFAULT. Se pueden añadir después con ALTER TABLE … ADD CONSTRAINT, que es justo lo que pidió el tribunal en 2026 para garantizar que un DNI no se repita: ALTER TABLE ALUMNO ADD CONSTRAINT dni_unique UNIQUE (dni);. Merece detenerse en por qué esa es la buena y no las otras tres:
- Un CREATE INDEX normal acelera la búsqueda pero no impide duplicados (haría falta CREATE UNIQUE INDEX).
- ALTER TABLE … MODIFY dni PRIMARY KEY no es la sintaxis para añadir una clave primaria, y además la tabla ya tiene la suya.
- Una vista con SELECT DISTINCT oculta los duplicados al consultar, pero no evita que se inserten.
Y la distinción entre las tres formas de vaciar o eliminar, que el tribunal pregunta como afirmación falsa:
| Sentencia | Sublenguaje | Qué borra | Admite WHERE |
|---|---|---|---|
| DELETE | DML | Filas, dejando intacta la definición de la tabla. Se registra fila a fila y se puede deshacer. | Sí |
| TRUNCATE | DDL | Todas las filas de golpe, desasignando páginas. | No |
| DROP | DDL | La estructura del objeto junto con todos los datos que contenga. | No |
⚠️ «DELETE sirve para borrar objetos como bases de datos, tablas o índices» es falso: eso es DROP. Y DROP no usa WHERE ni es DCL.
Los tipos de datos de la norma
La parte 2 de ISO/IEC 9075 fija los tipos predefinidos, y su elección es materia de examen porque cada uno tiene una consecuencia física:
| Familia | Tipos | Lo que hay que saber |
|---|---|---|
| Cadenas de caracteres | CHAR(n), VARCHAR(n), CLOB; con la variante NCHAR y NVARCHAR para juegos nacionales | CHAR es de longitud FIJA y rellena con espacios hasta n; VARCHAR es de longitud VARIABLE y solo ocupa lo que hay. CHAR conviene cuando todos los valores miden lo mismo, como un DNI o un código de provincia. |
| Numéricos exactos | SMALLINT, INTEGER, BIGINT, NUMERIC(p,e), DECIMAL(p,e) | NUMERIC y DECIMAL guardan precisión (dígitos totales) y escala (decimales) de forma exacta: son los que hay que usar para importes, nunca los aproximados. |
| Numéricos aproximados | REAL, DOUBLE PRECISION, FLOAT(p) | Coma flotante binaria: no representan exactamente 0,1 y arrastran error de redondeo. |
| Fecha y hora | DATE, TIME, TIMESTAMP, INTERVAL, y las variantes WITH TIME ZONE | TIMESTAMP lleva fecha y hora con fracciones de segundo; INTERVAL representa duraciones, no instantes. |
| Otros | BOOLEAN, BLOB, XML (parte 14), JSON (desde SQL:2023), ARRAY y MULTISET | El tipo JSON es la novedad de la novena edición; hasta entonces cada fabricante lo resolvía a su manera (JSONB en PostgreSQL). |
Y por encima de todos ellos está el valor nulo, que no es un valor sino la ausencia de él y que obliga a una lógica de tres estados —cierto, falso y desconocido—. Consecuencias que se preguntan: NULL no es igual a NULL, así que la comparación se escribe IS NULL y nunca = NULL; cualquier operación aritmética con NULL da NULL; y las funciones de agregación, salvo COUNT(*), ignoran los nulos.
4.3. DML y consultas
La inserción exige que las cadenas vayan entre comillas simples y bien cerradas, que es donde el tribunal esconde la errata:
INSERT INTO CuerpoBecado (Codigo, Denominacion)
VALUES ('TAI', 'Técnico Auxiliar de Informática');
La consulta sigue un orden de cláusulas fijo, y un orden de evaluación distinto del orden de escritura, lo que explica por qué no se puede usar un alias del SELECT dentro del WHERE:
| Se escribe | Se evalúa |
|---|---|
| SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY | FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY |
La cláusula que especifica el criterio de ordenación es ORDER BY, con ASC (por defecto) o DESC. Y para quedarse con las primeras filas, cada dialecto tiene lo suyo: TOP(n) en SQL Server, LIMIT n en MySQL y PostgreSQL, FETCH FIRST n ROWS ONLY en la norma y en Oracle moderno, ROWNUM en Oracle clásico.
⚠️ Detalle que decidió una pregunta de 2026: para obtener los diez últimos usuarios dados de alta no basta con TOP(10): hace falta ORDER BY FechaCreacion DESC, porque sin ordenar descendente TOP devuelve diez cualesquiera, y ordenando ascendente devuelve los diez primeros.
4.4. Combinaciones, agregación y subconsultas
| Combinación | Qué devuelve |
|---|---|
| INNER JOIN | Solo las filas con correspondencia en ambas tablas. Es la que responde a «los alumnos que tienen matrículas asociadas». |
| LEFT OUTER JOIN | Todas las de la izquierda; las de la derecha que no casan salen a NULL. Es la que sirve para encontrar los que NO tienen, añadiendo IS NULL. |
| RIGHT OUTER JOIN | La simétrica. |
| FULL OUTER JOIN | Todas las de ambos lados. |
| CROSS JOIN | Producto cartesiano. Es lo que ocurre, sin querer, al escribir FROM A, B sin condición de enlace. |
| SELF JOIN | Una tabla consigo misma, con alias distintos (el empleado y su jefe). |
Las funciones de agregación son COUNT, SUM, AVG, MIN y MAX. Dos reglas que se preguntan: COUNT(*) cuenta filas incluidos los nulos, y COUNT(columna) los excluye; y toda columna del SELECT que no esté agregada tiene que aparecer en el GROUP BY. De ahí que la forma correcta de contar matrículas por programa sea:
SELECT id_programa, COUNT(*) FROM MATRICULA GROUP BY id_programa;
…y sean falsas las variantes que omiten el BY, que omiten el GROUP BY entero teniendo una columna sin agregar, o que usan SUM(*), que ni siquiera es sintaxis válida: SUM exige una expresión numérica. Para filtrar después de agrupar se usa HAVING, no WHERE, que actúa antes.
Las subconsultas pueden ir en el SELECT, en el FROM (subconsulta en línea) o en el WHERE, con los operadores IN, NOT IN, EXISTS, NOT EXISTS, ANY/SOME y ALL. Y para comparar cadenas con comodines está LIKE, donde el % sustituye a cualquier número de caracteres y el _ a uno solo. Buscar los ficheros que no son PDF se escribe NOT LIKE '%.pdf': sin el comodín inicial no encontraría nada, porque el nombre no empieza por el punto.
4.5. Vistas, índices, rutinas y disparadores
Una vista es una tabla virtual definida por una consulta; no almacena datos —salvo que sea materializada—, y sirve para simplificar consultas, para presentar el nivel externo de ANSI/SPARC y como mecanismo de seguridad, ocultando columnas o filas.
Los procedimientos almacenados son rutinas compiladas y guardadas en la propia base de datos, que reducen el tráfico de red y centralizan la lógica. En SQL Server sus tipos son cuatro: definidos por el usuario, temporales, de sistema y extendidos. La diferencia con una función: la función devuelve obligatoriamente un valor y puede usarse dentro de una expresión; el procedimiento puede no devolver nada y se invoca con CALL o EXECUTE.
Un disparador o trigger es un procedimiento que se ejecuta automáticamente cuando ocurre un evento sobre una tabla. Lo que hay que saber exactamente:
- Los eventos DML que lo activan son INSERT, UPDATE y DELETE.
- El momento puede ser BEFORE o AFTER del evento (y INSTEAD OF sobre vistas).
- La granularidad puede ser FOR EACH ROW (por fila) o por sentencia.
- 🚨 Un error durante la ejecución de un trigger SÍ cancela automáticamente la operación que lo disparó: el disparador forma parte de la misma transacción. Decir que «la cancelación hay que programarla» es la afirmación falsa que el tribunal repitió en tres exámenes.
- En SQL Server los tipos de disparador son DML, DDL y LOGON.
La sintaxis ANSI empieza por el nombre, sigue con el momento y el evento y termina con ON y la tabla —sin la palabra TABLE—:
CREATE TRIGGER Validar_cambio BEFORE UPDATE ON Departamento CREATE TRIGGER Validar_salario BEFORE UPDATE OF Salario ON Empleados
Las variantes falsas que ha usado el tribunal son siempre las mismas cuatro: meter OF TABLE, escribir ON TABLE, poner CREATE NEW TRIGGER o cambiar el ON por IN.
Los eventos (en MySQL, CREATE EVENT) son tareas que se ejecutan automáticamente en un momento programado, con la temporalidad en la cláusula ON SCHEDULE. ⚠️ Un evento de ejecución única se elimina solo al terminar, salvo que se declare ON COMPLETION PRESERVE: afirmar que «hay que eliminarlo manualmente» es falso.
4.6. Los dialectos
| SGBD | Lenguaje procedimental | Rasgos que pregunta el tribunal |
|---|---|---|
| Oracle | PL/SQL: lenguaje de procedimiento cuya sintaxis permite insertar sentencias SQL y que se almacena compilado dentro de la base de datos. | La tabla ficticia DUAL; RMAN (Recovery Manager) para las copias de seguridad; CREATE USER … IDENTIFIED BY …; las secuencias; y funciones como INSTR(cadena, subcadena, posición, ocurrencia), que devuelve la posición de la n-ésima aparición buscando desde una posición dada. |
| SQL Server | Transact-SQL (T-SQL) | DENY como DCL; TOP(n); los comandos de consola DBCC, como DBCC CHECKIDENT para comprobar o reiniciar el valor de identidad de una tabla; los cuatro tipos de procedimiento almacenado; y Machine Learning Services, la característica que permite ejecutar scripts de Python y de R sobre datos relacionales. |
| MySQL / MariaDB | Procedimientos SQL/PSM | AUTO_INCREMENT; LIMIT; la base de datos de sistema mysql, cuya tabla mysql.user guarda las cuentas —de ahí que para saber quién accede y desde dónde se consulte SELECT user, host FROM mysql.user, porque el usuario en MySQL es el par usuario+host—. |
| PostgreSQL | PL/pgSQL | Muy apegado a la norma; tipos JSONB y de matrices. |
5. Transacciones, concurrencia y recuperación
Una transacción es una unidad lógica de trabajo que se ejecuta por completo o no se ejecuta. Empieza implícita o explícitamente y termina con COMMIT —que confirma y hace permanentes los cambios— o con ROLLBACK, que restituye todas las modificaciones realizadas desde el inicio de la transacción o desde un punto de retorno. Ese punto de retorno intermedio se marca con SAVEPOINT, y ROLLBACK TO SAVEPOINT deshace solo hasta él.
Las propiedades ACID
| Sigla | Propiedad | Qué garantiza |
|---|---|---|
| A | Atomicidad | Todo o nada: si falla un paso, se deshacen todos. |
| C | Consistencia | La transacción lleva la base de datos de un estado válido a otro estado válido, cumpliendo todas las restricciones. |
| I | Aislamiento (Isolation) | Una transacción en curso no ve los estados intermedios de otra. |
| D | Durabilidad | Confirmada la transacción, sus efectos sobreviven a cualquier fallo posterior. |
⚠️ Las dos falsificaciones habituales del acrónimo cambian la C por «coherencia» y la D por «disponibilidad» o «distribución». La D es durabilidad; la disponibilidad es la A del teorema CAP, que es otra cosa y se ve en el apartado 7.
Las tres anomalías de concurrencia
| Anomalía | En qué consiste |
|---|---|
| Lectura sucia (dirty read) | Una transacción lee datos que otra ha modificado y todavía no ha confirmado. Si la otra hace ROLLBACK, lo leído nunca existió. |
| Lectura no repetible (non-repeatable read) | Se lee la misma fila dos veces dentro de la misma transacción y devuelve valores distintos, porque otra la modificó y confirmó en medio. |
| Lectura fantasma (phantom read) | Se repite la misma consulta de rango y aparecen (o desaparecen) filas nuevas que otra transacción insertó o borró. |
⚠️ No existe ninguna «lectura hundida»: fue el término inventado con el que el tribunal construyó el distractor en dos exámenes.
Los cuatro niveles de aislamiento de ANSI SQL
Esta tabla resuelve por sí sola varias preguntas oficiales, y conviene memorizarla como una escalera: cada nivel elimina una anomalía más y admite menos concurrencia.
| Nivel | Lectura sucia | Lectura no repetible | Lectura fantasma |
|---|---|---|---|
| READ UNCOMMITTED (lectura no confirmada) | Posible | Posible | Posible |
| READ COMMITTED (lectura confirmada) | Evitada | Posible | Posible |
| REPEATABLE READ (lectura repetible) | Evitada | Evitada | Posible |
| SERIALIZABLE | Evitada | Evitada | Evitada |
De ahí salen literalmente dos preguntas repetidas: el nivel que evita lecturas sucias y no repetibles pero admite fantasmas es REPEATABLE READ; y la afirmación correcta sobre los niveles es que «la lectura repetible protege contra la lectura sucia y la lectura no repetible, pero no contra la lectura fantasma». Las falsas de esa pregunta invertían siempre lo mismo: decir que la no confirmada protege contra algo (no protege contra nada), que la confirmada no protege contra la lectura sucia (sí protege) o que serializable deja pasar las no repetibles (no deja pasar ninguna).
Cómo se consigue: bloqueos y versiones
- Control pesimista, con bloqueos compartidos (de lectura) y exclusivos (de escritura), a nivel de fila, página o tabla. El protocolo que garantiza la seriabilidad es el bloqueo en dos fases (2PL): una fase de expansión en la que solo se adquieren bloqueos y una de contracción en la que solo se liberan.
- Control optimista con multiversión (MVCC), que usa PostgreSQL y Oracle: cada transacción ve una instantánea coherente, y los lectores no bloquean a los escritores ni al revés.
- Los bloqueos traen interbloqueos: el SGBD los detecta con un grafo de espera y resuelve eligiendo una víctima, a la que hace ROLLBACK.
Recuperación
El registro de transacciones anota cada cambio antes de escribirlo en los ficheros de datos (protocolo write-ahead logging). Tras una caída, el sistema rehace (redo) las transacciones confirmadas que no llegaron a disco y deshace (undo) las que quedaron a medias, tomando como referencia el último punto de control (checkpoint). Las copias de seguridad pueden ser completas, diferenciales o incrementales, y en caliente o en frío; en Oracle la herramienta propia es RMAN.
Bases de datos distribuidas
Una base de datos distribuida reparte los datos entre varios nodos conectados en red, pero se presenta al usuario como una sola. Sus dos operaciones de reparto son la fragmentación —horizontal por filas, vertical por columnas o mixta— y la replicación, que duplica fragmentos para ganar disponibilidad y rapidez de lectura a costa de complicar la escritura.
El objetivo de diseño es la transparencia en sus varias formas: de localización (no hace falta saber en qué nodo está el dato), de fragmentación, de replicación y de concurrencia. Es, en el fondo, la regla 11 de Codd llevada a la práctica.
Para que una transacción que toca varios nodos conserve la atomicidad se usa el protocolo de compromiso en dos fases (two-phase commit, 2PC), coordinado por uno de los nodos:
- Fase de preparación o votación: el coordinador pregunta a todos los participantes si pueden confirmar; cada uno asegura sus cambios en el registro y responde preparado o abortar.
- Fase de decisión: si todos votaron preparado, el coordinador ordena COMMIT; si uno solo votó abortar, ordena ROLLBACK a todos.
Su punto débil es que bloquea: si el coordinador cae entre las dos fases, los participantes quedan en la incertidumbre. De ahí que existan el compromiso en tres fases (3PC) y, en el mundo distribuido moderno, alternativas como el patrón saga con transacciones compensatorias.
6. Bases de datos orientadas a objetos
Aparecen para resolver el desajuste de impedancia objeto-relacional: los lenguajes orientados a objetos manejan objetos con identidad, herencia y métodos, mientras que el modelo relacional solo entiende tablas de valores atómicos, y traducir de uno a otro es costoso y pierde semántica. Un SGBDOO almacena directamente los objetos, con su estructura y su comportamiento.
Sus conceptos propios:
- Identificador de objeto (OID): identidad única, inmutable y generada por el sistema, independiente del valor de sus atributos. Es la diferencia capital con la clave primaria relacional, que es un valor del propio objeto y puede cambiar.
- Clase, atributos y métodos; encapsulación; herencia simple o múltiple; polimorfismo.
- Persistencia: el objeto sobrevive a la ejecución del programa. Puede ser por herencia de una clase persistente, por alcanzabilidad desde una raíz o por marcado explícito.
- Constructores de colección: conjunto (set), bolsa (bag), lista y matriz.
El estándar de referencia lo publicó el Object Data Management Group (ODMG), y su última versión es ODMG 3.0 (2000). Consta de un modelo de objetos, un lenguaje de definición ODL, un lenguaje de consulta OQL —de sintaxis parecida a SQL pero que devuelve objetos y permite navegar por referencias con la notación de punto— y enlaces con C++, Smalltalk y Java. Productos: ObjectDB, db4o, Versant, ObjectStore.
La vía que triunfó comercialmente, sin embargo, fue la intermedia: los SGBD objeto-relacionales, que añaden al núcleo relacional tipos definidos por el usuario, tipos estructurados, herencia de tablas, colecciones y métodos. Es lo que incorporó SQL:1999 y lo que ofrecen Oracle, PostgreSQL y DB2.
Y en el desarrollo, el problema se resuelve casi siempre con un mapeador objeto-relacional (ORM), que traduce entre clases y tablas: Hibernate y NHibernate, ADO.NET Entity Framework, EclipseLink, Doctrine, SQLAlchemy. ⚠️ «Ruby Hibernation» no existe; el ORM de Ruby on Rails es Active Record. En Java, la especificación estándar es Jakarta Persistence (JPA), antes Java Persistence API: necesita un proveedor que la implemente (Hibernate, EclipseLink), una entidad representa normalmente una tabla y cada instancia una fila, define relaciones uno a uno, uno a muchos y muchos a muchos, y su lenguaje de consulta orientado a objetos se llama JPQL —no «JPSQL»—.
6 bis. El Manifiesto y las trece características obligatorias
🚨 El tribunal no pregunta por los conceptos sueltos: pregunta por la lista cerrada. En 2023 planteó «entre las características obligatorias de un sistema gestor de bases de datos orientadas a objetos, NO se encuentra…», y esa expresión remite al Manifiesto de los sistemas de bases de datos orientados a objetos —el texto de Atkinson y otros, de 1989—, que fijó qué tiene que cumplir un producto para poder llamarse así. Reparte las características en tres grupos, y el reparto es tan preguntable como la lista:
- Obligatorias («las reglas de oro»): son trece y hay que cumplirlas todas.
- Opcionales: mejoran el sistema pero no definen la categoría. Son la herencia múltiple, la comprobación e inferencia de tipos, la distribución, las transacciones largas o de diseño y el control de versiones.
- Abiertas: cada fabricante elige. Son el paradigma de programación, el sistema de representación y el sistema de tipos.
Las trece obligatorias, en las dos mitades de las que salen:
| De ser orientada a objetos (8) | De ser una base de datos (5) |
|---|---|
| Objetos complejos: poder construirlos a partir de otros con constructores de conjunto, lista, tupla… | Persistencia: el objeto sobrevive a la ejecución del programa. |
| Identidad de objetos: cada objeto tiene un identificador independiente del valor de sus atributos. | Gestión de grandes volúmenes: índices, agrupamiento y memoria intermedia, transparentes para el programador. |
| Encapsulamiento: se ve la interfaz, no la implementación. | Concurrencia: varios usuarios a la vez, con control de acceso simultáneo. |
| Tipos o clases: el esquema es un conjunto de clases o de tipos. | Recuperación: ante fallo de programa, de sistema o de soporte, se vuelve a un estado coherente. |
| Jerarquías de tipos o clases: herencia. | Facilidad de consulta: un mecanismo de consulta de alto nivel, declarativo y eficiente. |
| Sobrecarga, redefinición y ligadura tardía: el mismo nombre de operación con implementaciones distintas, resueltas en ejecución. | |
| Completitud computacional: el lenguaje puede expresar cualquier cálculo, no solo consultas. | |
| Extensibilidad: el conjunto de tipos es ampliable por el usuario, y los tipos que él define se usan igual que los predefinidos. |
⚠️ La respuesta de aquella pregunta era la extensibilidad, dicha del revés: el distractor afirmaba que «el conjunto de tipos de datos debe ser fijo, consiguiendo así mayor eficiencia en las búsquedas», y es precisamente lo contrario de la regla octava. La forma de la trampa es reconocible y se repite: coge una característica obligatoria, la invierte y le añade una razón técnica que suena bien. La eficiencia de las búsquedas no depende de que el catálogo de tipos esté cerrado, sino de los índices, que son otra regla distinta.
7. Bases de datos NoSQL
NoSQL se lee «not only SQL»: no es un modelo, sino una familia de sistemas que renuncian a parte del modelo relacional para escalar horizontalmente —añadiendo máquinas en lugar de agrandar una— con volúmenes enormes, datos poco estructurados y esquemas cambiantes. Sus rasgos comunes son ausencia de esquema rígido, distribución y replicación nativas, desnormalización deliberada y, casi siempre, renuncia a las uniones y a la integridad referencial, que se resuelven en la aplicación.
El teorema CAP y el acrónimo BASE
El teorema CAP lo enunció Eric Brewer en 2000 y lo demostraron Gilbert y Lynch en 2002: un sistema distribuido no puede garantizar simultáneamente las tres propiedades siguientes, y ante una partición de red hay que elegir dos:
- C — Consistencia: toda lectura devuelve la escritura más reciente.
- A — Disponibilidad: toda petición recibe respuesta, aunque no sea la más reciente.
- P — Tolerancia a particiones: el sistema sigue funcionando aunque se pierdan mensajes entre nodos.
Como en un sistema realmente distribuido la partición no es opcional, la elección práctica es entre CP (se sacrifica disponibilidad: MongoDB, HBase) y AP (se sacrifica consistencia inmediata: Cassandra, DynamoDB, CouchDB). Frente a ACID, este mundo se resume en BASE: Basically Available (básicamente disponible), Soft state (estado blando, que puede cambiar sin entrada nueva) y Eventually consistent (consistencia eventual: si cesan las escrituras, todas las réplicas convergen).
Los cuatro tipos
| Tipo | Cómo modela los datos | Productos |
|---|---|---|
| Clave-valor | Pares clave→valor opaco. Acceso por clave, rapidísimo. Ideal para sesiones y caché. | Redis, Amazon DynamoDB, Riak, Memcached |
| Documental | Documentos autodescritos en JSON, BSON o XML, agrupados en colecciones. Se puede consultar por el contenido del documento, no solo por la clave. | MongoDB, CouchDB, Elasticsearch |
| Columnar o de familias de columnas (wide-column) | Filas con familias de columnas variables; el almacenamiento se orienta a columna, lo que favorece la analítica sobre volúmenes enormes. | Apache Cassandra (con su lenguaje CQL), HBase, ScyllaDB, Google Bigtable |
| De grafos | Nodos, relaciones (aristas) y propiedades. Recorrer relaciones cuesta lo mismo dé la profundidad que sea, algo que en el modelo relacional exigiría uniones encadenadas. | Neo4j (con su lenguaje Cypher), JanusGraph, ArangoDB, Amazon Neptune |
🚨 Esta tabla es la que más veces ha caído, y siempre de la misma forma: pidiendo asociar producto y tipo, o pidiendo dos tipos válidos entre cuatro parejas de las que tres llevan un nombre inventado —«sistemáticos», «metodológicas»—. Los que hay que tener clavados: Cypher es de Neo4j; JanusGraph es de grafos (frente a DynamoDB, clave-valor; CouchDB, documental; y HBase, columnar); y las bases de datos relacionales NO usan «un método simple de clave-valor» —esa era la afirmación incorrecta de 2026—.
Cómo escalan
- Fragmentación horizontal o sharding: cada nodo guarda un subconjunto de las filas, elegido por una clave de partición o por un anillo de hash consistente.
- Replicación maestro-esclavo o entre iguales, con quórum: si el número de réplicas leídas más el de escritas supera al total (R + W > N), la lectura es consistente.
- Reducción por mapeo (MapReduce) y sus sucesores para el procesamiento distribuido.
Por último, NewSQL designa a los sistemas que buscan lo mejor de los dos mundos: escalado horizontal con garantías ACID y lenguaje SQL (Google Spanner, CockroachDB, VoltDB, TiDB).
8. Seguridad en bases de datos
Control de acceso
El control de accesos se articula en tres piezas: autenticación (quién eres: usuario y contraseña propios del SGBD, o autenticación delegada en el sistema operativo o en el directorio), autorización (qué puedes hacer) y auditoría (qué has hecho). Es el mismo trío de los protocolos AAA, cuyas tres aes son autenticación, autorización y contabilización (accounting) —no «control» ni «aislamiento», que son los distractores del tribunal—.
La autorización se declara con DCL. La buena práctica es el privilegio mínimo: nunca conceder al usuario de la aplicación permisos de DDL, y agrupar permisos en roles en vez de asignarlos usuario a usuario.
GRANT SELECT, INSERT ON Alumno TO rol_gestor; REVOKE INSERT ON Alumno FROM rol_gestor;
La cláusula WITH GRANT OPTION permite al beneficiario ceder a su vez el permiso, y es la que hay que vigilar porque propaga privilegios en cascada. Además, una vista es un instrumento de seguridad de primer orden: se concede el SELECT sobre la vista y no sobre la tabla, y así se ocultan columnas sensibles o se limitan las filas visibles.
Inyección SQL
Es la vulnerabilidad más característica de las bases de datos y la que el tribunal ha llevado al examen: un usuario malintencionado introduce fragmentos de SQL en un campo de un formulario y, si la aplicación los concatena tal cual en la consulta, el SGBD los ejecuta como parte de la sentencia. La cadena de manual es 100 OR 1=1: convierte la condición del WHERE en una tautología y devuelve la tabla entera.
La contramedida principal no es filtrar comillas, sino usar consultas parametrizadas o sentencias preparadas (prepared statements), en las que el valor viaja aparte del texto de la sentencia y nunca se interpreta como código. Se completa con procedimientos almacenados que no construyan SQL dinámico, validación de entradas, principio de privilegio mínimo para que una inyección no pueda leerlo todo, y mensajes de error que no revelen la estructura de la base. Está catalogada en el OWASP Top Ten dentro de la categoría de inyección.
Protección del dato
- Cifrado en reposo: del fichero de datos completo con cifrado transparente (TDE), o de columnas concretas. Y cifrado en tránsito con TLS en la conexión cliente-servidor.
- Enmascaramiento dinámico de datos, que devuelve el valor ofuscado a quien no tiene permiso, y seudonimización o anonimización para los entornos de prueba: bajar a preproducción una copia de producción sin tratar es una de las brechas más frecuentes.
- Auditoría: registro de accesos y de cambios, que en el sector público se conecta con las medidas de trazabilidad del Esquema Nacional de Seguridad.
- Copias de seguridad probadas: una copia que nunca se ha restaurado no es una copia.
Y el marco jurídico, que en esta vertical se examina en el bloque I pero se aplica aquí: el RGPD y la Ley Orgánica 3/2018 exigen protección de datos desde el diseño y por defecto, minimización, y medidas técnicas apropiadas al riesgo —cifrado y seudonimización entre ellas—. Un incidente que deje la base de datos corrupta e inaccesible afecta a dos dimensiones de la seguridad a la vez: la disponibilidad —no se puede acceder— y la integridad —el fichero está dañado—, que es exactamente lo que preguntó el tribunal.
9. Conectividad, explotación y puertos
Las aplicaciones no hablan con el SGBD directamente, sino a través de una interfaz de conectividad:
- ODBC (Open Database Connectivity), de Microsoft y basado en SQL/CLI: API en C, independiente del SGBD, con un gestor de controladores.
- JDBC, el equivalente en Java, con cuatro tipos de controlador que el tribunal ha preguntado uno a uno:
| Tipo | Cómo funciona |
|---|---|
| 1 | Puente JDBC-ODBC: se apoya en otra tecnología (ODBC) para hablar con la base de datos. Obsoleto. |
| 2 | API nativa, parcialmente Java: llama a las bibliotecas nativas del cliente del SGBD, que hay que instalar en la máquina. |
| 3 | Protocolo de red, Java puro: habla con un middleware que traduce al protocolo del SGBD. |
| 4 | Protocolo nativo, Java puro (thin driver): implementa en Java el protocolo de red del fabricante. Es el que se usa hoy. |
⚠️ Las tres falsedades que puso el tribunal en esta pregunta: decir que los tipos son tres (son cuatro), atribuir al tipo 1 el Java puro con protocolo de red (eso es el 3 y el 4) y llamar «puente» al tipo 2 (el puente es el 1). En una aplicación Java, los paquetes para obtener la conexión desde un origen de datos del servidor son javax.naming (JNDI, para localizarlo) y javax.sql (DataSource).
Los puertos por defecto se preguntan tal cual, así que van en una tabla:
| Sistema | Puerto |
|---|---|
| MySQL / MariaDB | 3306/TCP |
| PostgreSQL | 5432/TCP |
| Oracle (proceso de escucha TNS) | 1521/TCP |
| SQL Server (motor, instancia predeterminada) | 1433/TCP (el SQL Server Browser usa el 1434/UDP) |
| MongoDB | 27017/TCP |
| Redis | 6379/TCP |
| Cassandra (CQL nativo) | 9042/TCP |
| CouchDB | 5984/TCP |
| Neo4j (protocolo Bolt) | 7687/TCP |
Explotación: del OLTP al almacén de datos
| OLTP | OLAP | |
|---|---|---|
| Para qué | Operación diaria: altas, bajas, modificaciones. | Análisis y decisión. |
| Operaciones | Muchas, cortas, sobre pocas filas. | Pocas, largas, sobre millones de filas. |
| Diseño | Normalizado. | Desnormalizado: esquema en estrella o en copo de nieve, con tablas de hechos y de dimensiones. |
| Datos | Actuales y detallados. | Históricos y agregados. |
El almacén de datos (data warehouse) se alimenta mediante procesos ETL (extracción, transformación y carga) o ELT; un subconjunto departamental suyo es un data mart; y el depósito que guarda el dato en bruto sin transformar es el lago de datos (data lake). Sobre ellos trabajan la minería de datos y las herramientas de inteligencia de negocio. Y para acabar, el vocabulario de las operaciones básicas sobre cualquier almacén: CRUD, que es Create, Read, Update and Delete.
10. Lo que ya ha preguntado el tribunal
Preguntas reales de exámenes oficiales del INAP que se responden con este tema:
- «En una entidad de base de datos con 4 columnas y 7 filas…» → el grado es 4 y la cardinalidad 7 (2026, dos modelos). Apartado 2.2.
- «De acuerdo con Métrica v3, ¿cuál es el término que representa la participación en la relación de cada una de las entidades afectadas?» → la cardinalidad (2024, tres modelos). Apartado 3.1.
- «El número máximo de ocurrencias de cada tipo de entidad que pueden intervenir en una ocurrencia de la relación se llama…» → tipo de correspondencia (2023). Apartado 3.1.
- «Señale la respuesta correcta relativa al Modelo E/R Extendido según Métrica v3» → la entidad es aquel objeto, real o abstracto, acerca del cual se desea almacenar información (2023, dos modelos). Apartado 3.1.
- «Un atributo representado con una elipse discontinua es un atributo…» → derivado (2026, dos modelos). Apartado 3.2.
- «Señale la respuesta correcta sobre la normalización en Métrica v3» → una entidad está en 2FN si está en 1FN y todos los atributos que no forman parte de las claves candidatas tienen dependencia funcional completa respecto de éstas (2024, tres modelos). Apartado 3.4.
- «Una tabla está en 3FN si…» → está en 2FN y no existe ninguna dependencia transitiva de atributos no principales respecto de las claves (2019). Apartado 3.4.
- «Según Métrica v3, la Dependencia Funcional se define como…» → un atributo Y depende funcionalmente de otro X si, y sólo si, a cada valor de X le corresponde un único valor de Y (2019). Apartado 3.4.
- «Para optimizar el modelo físico y reducir el número de accesos, ¿qué acción se aplicaría?» → introducir elementos redundantes (2024, tres modelos). Apartado 3.5.
- «¿Cuál NO se corresponde con una de las 12 Reglas de Codd?» → la inventada era «dependencia de la distribución», porque Codd exige justo la independencia (2019). Apartado 2.1.
- «La arquitectura ANSI/SPARC define tres niveles. Indique la INCORRECTA» → no existe el «nivel contextual», y el sinónimo de nivel lógico es el conceptual, no el interno (2023, pregunta anulada por tener dos opciones falsas). Apartado 1.2.
- «¿Cómo se denomina la columna cuyos valores coinciden con la clave primaria de otra tabla?» → clave foránea (2026). Apartado 2.3.
- «¿Cuál es la característica diferenciadora de las claves foráneas?» → un atributo que referencia la clave primaria de otra tabla (2024, dos modelos). Apartado 2.3.
- «De las siguientes afirmaciones sobre bases de datos relacionales, indique la INCORRECTA» → la falsa era «las bases de datos relacionales utilizan un método simple de clave-valor» (2026). Apartado 7.
- «Las bases de datos relacionales ofrecen propiedades ACID. El acrónimo se refiere a…» → Atomicidad, Consistencia, Aislamiento y Durabilidad (2023). Apartado 5.
- «Los tipos más corrientes de anomalías. Señale la INCORRECTA» → no existen las «lecturas hundidas» (2023, dos modelos). Apartado 5.
- «¿Qué nivel de aislamiento evita lecturas sucias y no repetibles, pero admite fantasmas?» → REPEATABLE READ (2024, dos modelos). Apartado 5.
- «Sobre los niveles de aislamiento de ANSI SQL, indique la sentencia correcta» → la lectura repetible protege contra la lectura sucia y la no repetible, pero no contra la fantasma (2026). Apartado 5.
- «Para restituir todas las modificaciones desde el inicio de una transacción o desde un punto de retorno se usa…» → ROLLBACK (2026, dos modelos). Apartado 5.
- «¿A qué tipo de comandos SQL pertenece DENY en Transact-SQL?» → DCL (2026, dos modelos). Apartado 1.4.
- «Referente a los comandos DML, señale la correcta» → el comando SELECT es un comando DML (2024, tres modelos). Apartado 1.4.
- «Referente al comando DROP, es correcto decir…» → se utiliza para eliminar la estructura de una tabla junto con cualquier dato almacenado en ella (2024, dos modelos). Apartado 4.2.
- «¿Cómo se eliminan los datos de una tabla pero no su definición?» → DELETE (2023). Apartado 4.2.
- «Con respecto a las sentencias SQL, indique la INCORRECTA» → la falsa era que DELETE sirve para borrar bases de datos, tablas o índices (2023). Apartado 4.2.
- «Forma válida de comenzar un Trigger en ANSI SQL» → CREATE TRIGGER nombre BEFORE UPDATE ON tabla, y con columna, BEFORE UPDATE OF columna ON tabla (2026, dos modelos, y 2019). Apartado 4.5.
- «Señale la INCORRECTA sobre los disparadores» → la falsa era que un error en el trigger no cancela automáticamente la operación (2024, tres modelos). Apartado 4.5.
- «¿Qué tipos de disparadores contempla SQL Server?» → DML, DDL y LOGON (2026). Apartado 4.5.
- «Señale la INCORRECTA sobre los eventos en SQL» → la falsa era que hay que eliminarlo manualmente tras ejecutarse (2024). Apartado 4.5.
- «¿Qué tipos de procedimientos almacenados hay en SQL Server?» → definidos por el usuario, temporales, de sistema y extendidos (2026). Apartado 4.5.
- «Garantizar que el DNI no se repita, con el máximo rendimiento en búsquedas» → ALTER TABLE ALUMNO ADD CONSTRAINT dni_unique UNIQUE (dni); (2026, dos modelos). Apartado 4.2.
- «Consultar solo los alumnos que tienen matrículas asociadas» → INNER JOIN … ON (2026, dos modelos). Apartado 4.4.
- «Número total de matrículas por programa formativo» → SELECT id_programa, COUNT(*) … GROUP BY id_programa (2026, dos modelos). Apartado 4.4.
- «Los diez últimos usuarios dados de alta en SQL Server» → SELECT TOP(10) … ORDER BY FechaCreacion DESC (2026). Apartado 4.3.
- «Crear una vista con el recuento de expedientes por usuario» → CREATE VIEW … SELECT columna, COUNT(…) … GROUP BY columna (2026). Apartado 4.5.
- «Ficheros adjuntos que NO son PDF» → NOT LIKE '%.pdf' con la subconsulta completa, incluido el FROM de la tabla interior (2024, dos modelos). Apartado 4.4.
- «Añadir un registro a la tabla CuerpoBecado» → INSERT INTO … VALUES ('TAI', 'Técnico Auxiliar de Informática');, con las dos comillas bien cerradas (2024, tres modelos). Apartado 4.3.
- «Crear la tabla Usuario» → CREATE TABLE Usuario (idUsuario bigint PRIMARY KEY, nombre varchar(255)); (2023). Apartado 4.2.
- «Crear una tabla en MySQL con clave autonumérica» → CREATE TABLE … (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, …) (2024, tres modelos). Apartado 4.6.
- «Cláusula que especifica el criterio de ordenación» → ORDER BY (2023). Apartado 4.3.
- «Crear un usuario en Oracle» → CREATE USER EDUCA_USER IDENTIFIED BY contraseña; (2026, dos modelos). Apartado 4.6.
- «Lenguaje de procedimiento de Oracle que admite SQL y se almacena compilado» → PL/SQL (2023, dos modelos). Apartado 4.6.
- «Comando de Oracle para la copia de seguridad» → RMAN (2023, dos modelos). Apartado 5.
- «Usuarios que acceden a la base de datos y desde qué host» → SELECT user, host FROM mysql.user (2024, tres modelos). Apartado 4.6.
- «Puerto por defecto de MySQL» → 3306 (2023). Apartado 9.
- «Puerto por defecto del motor de SQL Server, instancia predeterminada» → TCP 1433 (2026). Apartado 9.
- «¿Qué es Machine Learning Services para SQL Server?» → la característica que permite ejecutar scripts de Python y R con datos relacionales (2023). Apartado 4.6.
- «¿Cuál de las siguientes bases de datos utiliza Cypher?» → Neo4j (2026, dos modelos). Apartado 7.
- «Señale cuál es una base de datos orientada a grafos» → JanusGraph (2026). Apartado 7.
- «¿Qué opciones se corresponden con tipos de bases de datos NoSQL?» → documentales y clave-valor (2026, dos modelos). Apartado 7.
- «Un usuario introduce la cadena 100 OR 1=1 en un campo de un formulario. ¿Qué técnica está utilizando?» → inyección SQL (2019). Apartado 8.
- «Los protocolos AAA se descomponen en tres procesos. Señale la correcta» → autenticación, autorización y contabilización (2023). Apartado 8.
- «La base de datos se ha corrompido y los usuarios no pueden acceder. ¿A qué dimensiones de la seguridad afecta?» → a la disponibilidad y a la integridad (2024, dos modelos). Apartado 8.
- «Sobre los tipos de controladores JDBC» → los de tipo 3 usan un protocolo de red y middleware (2023). Apartado 9.
- «¿Cuál NO es un ORM?» → «Ruby Hibernation», que no existe (2019). Apartado 6.
- «Sobre Jakarta Persistence API (JPA)» → una entidad representa normalmente una tabla y cada instancia una fila (2024, dos modelos). Apartado 6.
- «Paquetes para conectar a la base de datos desde Java» → javax.naming y javax.sql (2023). Apartado 9.
- «¿Qué significa CRUD?» → Create, Read, Update and Delete (2023). Apartado 9.
- «INSTR('Corporate Floor','or', 3, 2) devuelve…» → 14: buscando desde la posición 3, la segunda aparición de «or» empieza en la 14 (2026). Apartado 4.6.
- «Reiniciar la secuencia de identidad de una tabla en SQL Server» → DBCC CHECKIDENT (2026). Apartado 4.6.
Cómo pregunta este tribunal, en cinco reglas. Primera: usa el vocabulario de Métrica v3 al pie de la letra, y ahí es donde separa a quien ha leído la metodología de quien ha leído un resumen —cardinalidad frente a tipo de correspondencia, y el dominio con existencia propia—. Segunda: pone SQL literal y cambia una sola palabra entre las cuatro opciones (el BY del GROUP BY, el ON del trigger, el DESC del ORDER BY). Tercera: inventa un término plausible para el distractor —«lecturas hundidas», «Ruby Hibernation», «bases de datos sistemáticas», «nivel contextual»—, así que si un nombre te suena raro, desconfía antes de descartarlo por bonito. Cuarta: abusa del enunciado en negativo, sobre todo en normalización, triggers y JDBC. Y quinta: repite: más de la mitad de las preguntas de esta lista han caído dos o tres veces. Recuerda la aritmética del ejercicio: cada error descuenta un tercio de un acierto y los blancos no penalizan, así que con dos opciones descartadas con fundamento, merece la pena arriesgar.
¿Te lo sabes? 🐂
Cien preguntas de este tema, escritas al estilo del cuestionario del INAP y contrastadas con los nueve exámenes oficiales que tenemos resueltos. Crea tu cuenta gratis para guardar tu progreso y repasar tus falladas. Gratis y siempre lo será.
