Saltar al contenido

Muchos a muchos

SQL · Unidad 12: Diseñar tablas

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_idcurso_idnota
315.5
328
3410
547.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. 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. 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. 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. 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. 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. 6. Ordena las líneas

    La escuela abre un curso nuevo, Teatro, que dará Irene y vale 2 créditos. Le toca el id 6. Sara, la estudiante 7, es la primera en inscribirse. Ordena las dos sentencias que lo apuntan y el SELECT que enseña quién lleva el curso 6. Sobran dos líneas.

  7. 7. Opción múltiple

    De vuelta en la tienda. pedidos también está en medio, entre clientes y productos, y sin embargo lleva su propio id en vez de una clave de dos columnas. ¿Por qué?

  8. 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 favoritos con dos columnas, en este orden. cliente_id es un entero obligatorio que apunta al id de clientes. producto_id es un entero obligatorio que apunta al id de productos. La clave primaria son las dos juntas, en ese mismo orden. Escribe el tipo como INTEGER.

Hacer esta lección

Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.

Ver todas las lecciones →