Claves foráneas
SQL · Unidad 12: Diseñar tablas
- Plan completo
- SQL
- 8 ejercicios
En la unidad 7 se dijo que esta base «rechaza un pedido del cliente 99». En la pasada viste esa regla parar un pedido de un producto que no existía. ¿Dónde está escrito que un pedido necesita un cliente y un producto que existan?
En la sentencia que creó pedidos, que es esta. En una base de verdad se lee, y no se vuelve a correr. Correrla pide tirar antes la tabla que existe, y sus doce filas se van con ella. En esta app vuelven en la siguiente ejecución.
REFERENCES clientes(id) va detrás del tipo, como las demás reglas. Dice que cada cliente_id tiene que ser el id de alguna fila de clientes. Eso es una clave foránea, y pedidos tiene dos.
DROP TABLE pedidos;
CREATE TABLE pedidos (
id INTEGER PRIMARY KEY,
cliente_id INTEGER NOT NULL
REFERENCES clientes(id),
producto_id INTEGER NOT NULL
REFERENCES productos(id),
cantidad INTEGER NOT NULL,
fecha TEXT NOT NULL
);
SELECT COUNT(*) AS filas
FROM pedidos;Devuelve
| filas |
|---|
| 0 |
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 tienda tiene ocho productos, del 1 al 8. Con esta tabla hecha, llegan tres sentencias más, una por una. ¿Cuál rechaza la base?
2. Completa el código
Ahora la tabla guarda de quién es cada opinión. Ana, la clienta 1, deja 5 estrellas. Completa la clave foránea.
3. Ordena las líneas
Ordena la tabla de opiniones, con su clave foránea hacia
productos, una opinión de 4 estrellas sobre los Audífonos, el producto 7, y elSELECTque la enseña. Sobran dos líneas.4. Encuentra el bug
La tabla de opiniones se crea sin error. Al guardar la primera opinión, aquí SQL contesta
no such table: main.producto, y señala elINSERT. ¿Qué línea tiene el problema?5. Encuentra el caso que falla
La tienda guarda una opinión de 4 estrellas sobre los Audífonos, el producto 7. Quien hizo la tabla escribió mal la clave foránea, y hoy no se nota. ¿Con cuál de estos cambios, hechos antes, la base rechaza esa opinión?
6. Ordena las líneas
Otro ensayo, que en una base de verdad se haría con
ALTER TABLEy sin perder nada. La tienda quiere rehacerclientescon una columna para el correo, que no se pueda repetir. Para que quepa, el ensayo deja fueraciudadyedad. Ordena las sentencias que tiran lo que haga falta, crean la tabla nueva y la consultan, todavía vacía. Sobran dos líneas.7. Predice la salida
Esta vez
cliente_idno llevaNOT NULL. Ana, la clienta 1, deja 5 estrellas, y alguien que no dice quién es deja 2. ¿Qué devuelve elSELECT?8. Escribe el código
La tienda apunta lo que le compra a cada proveedor. La tabla
proveedoresya está escrita. Debajo, creacomprascon cuatro columnas, en este orden.idva como siempre.proveedor_ides un entero obligatorio que apunta aliddeproveedores.producto_ides un entero obligatorio que apunta aliddeproductos.unidadeses un entero obligatorio. Escribe el tipo comoINTEGER.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.