Muchos a muchos
SQL · Unidad 12: Diseñar tablas
- Plan completo
- SQL
- 8 ejercicios
Otra base, la escuela, con sus estudiantes, sus cursos y sus notas. Hugo, el estudiante 3, lleva Música, el curso 4. ¿En qué tabla está apuntado eso?
En la tienda, un pedido era de un solo cliente, y un cliente tenía muchos pedidos. Es una relación de uno a muchos. En la escuela no hay un lado de «uno». Hugo lleva tres cursos, y en Música hay dos estudiantes. Una casilla curso_id en estudiantes no alcanza, y una estudiante_id en cursos, tampoco. Es una relación de muchos a muchos.
Lo apunta una tercera tabla, notas, con una fila por cada pareja de estudiante y curso. Llevas usándola desde la unidad 4.
SELECT estudiante_id, curso_id, nota
FROM notas
WHERE estudiante_id = 3
OR curso_id = 4;Devuelve
| estudiante_id | curso_id | nota |
|---|---|---|
| 3 | 1 | 5.5 |
| 3 | 2 | 8 |
| 3 | 4 | 10 |
| 5 | 4 | 7.5 |
El resto de la explicación está en la lección, que es del plan completo.
Ejercicios de esta lección
Se hacen en la app, que los corrige al momento y explica por qué.
1. Opción múltiple
La escuela quiere apuntar en qué aula se da cada curso. Un curso se da siempre en la misma aula, y en un aula se dan varios cursos. Habrá una tabla
aulas. ¿Dónde va la clave foránea?2. Completa el código
La tabla se tira, con sus catorce notas, que en esta app vuelven en la siguiente ejecución, y se rehace vacía. Después Leo, el estudiante 6, se inscribe en Ajedrez, el curso 5, y saca un 9. Completa a qué tabla apunta cada clave foránea de
notas.3. Encuentra el bug
Hugo, el estudiante 3, se inscribe en Ajedrez, el curso 5. Aquí SQL contesta
UNIQUE constraint failed: notas.estudiante_id, notas.curso_id. ¿Qué línea tiene el problema?4. Predice la salida
A Leo, el estudiante 6, le corrigen la nota de Matemáticas, el curso 1, de 4 a 5. Leo lleva también Ciencias, el curso 3, con un 6.5. ¿Qué devuelve el
SELECT?5. Encuentra el bug
Alguien rehace la tabla de solicitudes, y las dos de Sara ya no entran. Aquí SQL contesta
UNIQUE constraint failed: solicitudes.estudiante_id. ¿Qué línea tiene el problema?6. Ordena las líneas
La escuela abre un curso nuevo, Teatro, que dará Irene y vale 2 créditos. Le toca el
id6. Sara, la estudiante 7, es la primera en inscribirse. Ordena las dos sentencias que lo apuntan y elSELECTque enseña quién lleva el curso 6. Sobran dos líneas.7. Opción múltiple
De vuelta en la tienda.
pedidostambién está en medio, entreclientesyproductos, y sin embargo lleva su propioiden vez de una clave de dos columnas. ¿Por qué?8. Escribe el código
La tienda quiere que cada cliente marque sus productos favoritos. Un cliente puede marcar varios, un producto pueden marcarlo varios clientes, y nadie marca dos veces el mismo. Crea la tabla
favoritoscon dos columnas, en este orden.cliente_ides un entero obligatorio que apunta aliddeclientes.producto_ides un entero obligatorio que apunta aliddeproductos. La clave primaria son las dos juntas, en ese mismo orden. Escribe el tipo comoINTEGER.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.