Elegir espacio

Dos espacios

¿Qué quieres consultar?

Elige el espacio al que quieres entrar.

Biblioteca FastAPIPersistencia

Práctica focalizada · Bloque 4 · Unidad 4.3

EX-B4-10

Reducir un 1+N sin cambiar la respuesta

El listado de organizaciones devuelve sus activos correctamente, pero acceder a cada colección lazy emite un SELECT adicional por organización.

  • Escribir y ejecutar código
  • Diagnóstico de carga
  • Media
  • Apoyo ligero
  • Starter ejecutable

Cómo abordarla

Haz que integridad y atomicidad sean observables

Ejecuta primero el baseline. Después modifica la frontera indicada, escribe una regresión positiva y otra negativa y conserva la salida real.

Evidencia objetivo: Los ensayos separan conflicto unique, presupuesto de carga y operación multirow; cada uno conserva evidencia del motor, no solo del body HTTP.

Abrir laboratorio de código

1. Descarga y arranca

  • Starter con carga 1+NRelación uno-a-muchos funcional, cinco pruebas de continuidad y un criterio de presupuesto inicialmente rojo.

2. Escribe y prueba

  1. Predice 1+N para el fixture, ejecuta ambas suites y localiza la evaluación lazy.
  2. Captura o cuenta los SELECT emitidos por una sola petición.
  3. Añade una opción selectinload sobre la colección y conserva el orden y body publicados.
  4. Repite la traza y explica qué forma de cardinalidad justificaría otra estrategia.

3. Demuestra el comportamiento

  • Consulta corregida y pruebas finales.
  • Conteo y fragmentos de SQL antes y después.
  • Justificación de estrategia basada en la forma de la relación y la respuesta.

La respuesta principal es tu código y sus pruebas. Usa este espacio solo para anotar la predicción inicial y el resultado observado.

Predicción breve antes de ejecutar

¿Cuántos SELECT crecen con el número de organizaciones y qué carga conserva la forma de la respuesta con un coste acotado?

Presupuesto SQL

La respuesta contiene las mismas tres organizaciones y sus activos, mientras la traza pasa de cuatro SELECT a un máximo de dos.

Comprueba estas tres cosas

  1. ¿Qué línea dispara cada consulta adicional?
  2. ¿La relación define integridad, navegación Python o ambas?
  3. ¿Por qué selectinload encaja con una colección en esta respuesta?

Anota predicción, comando ejecutado y diferencia observada; el código vive en tu workspace.

Sin respuesta guardada.

Pistas opcionales

Pista única · Decide desde la forma
  • La consulta principal conoce que la respuesta recorrerá una colección.
  • selectinload agrupa las claves padre en una segunda consulta en lugar de consultar por cada fila.
Profundización opcional

Hacer explícito el presupuesto de consultas y seleccionar una estrategia de carga adecuada para una colección sin alterar el contrato HTTP.

Contexto adicional

  • Predice el número de SELECT para tres organizaciones y captura la traza antes de editar.
  • Conserva el body y la relación; cambia únicamente la estrategia de consulta.
  • No serialices consultas manuales por fila ni introduzcas paginación de hijos o arquitectura nueva.

Decisiones abiertas

  • Puedes instrumentar SQL con eventos o logs; conserva un conteo reproducible ligado a una petición.

Cómo revisar tu respuesta

  • Los cinco tests de continuidad y los dos criterios de carga pasan.
  • El body conserva organizaciones, activos y orden sin consultas desde el serializador.
  • Una petición con tres organizaciones ejecuta como máximo dos SELECT y la segunda consulta usa IN sobre las claves padre.
  • La solución usa una opción de carga explícita para la colección; no ejecuta un SELECT manual dentro del bucle.
  • El estudiante puede localizar por qué el coste anterior era 1+N y qué variable hacía crecer N.

Evidencia, revisión y reinicio

  • Número de SELECT previsto y observado para tres organizaciones.
  • Cinco pruebas de continuidad verdes y dos criterios de aceptación, uno inicialmente rojo.
  • Traza SQL antes y después con la misma representación HTTP.

Revisión: con Codex, utilizando la evidencia y los criterios anteriores; no se publica una solución oficial.

Reinicio: Volver a descomprimir ex-b4-10-n-plus-one.zip y borrar solo el SQLite generado dentro de ese workspace.