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.
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
- Predice 1+N para el fixture, ejecuta ambas suites y localiza la evaluación lazy.
- Captura o cuenta los SELECT emitidos por una sola petición.
- Añade una opción selectinload sobre la colección y conserva el orden y body publicados.
- 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
- ¿Qué línea dispara cada consulta adicional?
- ¿La relación define integridad, navegación Python o ambas?
- ¿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.