Restricciones
SQL · Unidad 12: Diseñar tablas
- Plan completo
- SQL
- 11 ejercicios
El proyecto de la unidad pasada dejó un -1 guardado en el stock de los Monitores, y una frase: «Nada en esta tabla le impide guardar un stock negativo». ¿Y quién se lo tenía que impedir?
Lo que una tabla rechaza y lo que deja pasar se decide en su CREATE TABLE. Cada regla se escribe detrás del tipo de su columna, y SQL las llama restricciones.
La tabla de proveedores de la lección pasada no tenía ninguna. Estas son las dos primeras. PRIMARY KEY hace de id la clave primaria, que no se repite. NOT NULL hace obligatoria una columna.
CREATE TABLE proveedores (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
telefono TEXT
);
INSERT INTO proveedores
(nombre, telefono)
VALUES
('Andina', '022501234'),
('Tecnosur', '042607788');
SELECT id, nombre, telefono
FROM proveedores;Devuelve
| id | nombre | telefono |
|---|---|---|
| 1 | Andina | 022501234 |
| 2 | Tecnosur | 042607788 |
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
Con esta tabla hecha y Andina dentro, llegan tres proveedores más, cada uno en su
INSERT. ¿A cuál rechaza la base?2. Completa el código
Se apunta Brisa, solo con su nombre. Completa las dos reglas para que la tabla le ponga su
idy no acepte a nadie sin nombre.3. Encuentra el bug
Se apuntan dos proveedores en un solo
INSERT, Andina y Brisa. Aquí SQL contestaUNIQUE constraint failed: proveedores.correo. ¿Qué línea tiene el problema?4. Predice la salida
Brisa y Tecnosur todavía no han dado su correo, y se apuntan sin él. La columna
correoesUNIQUE, y desde la unidad 4 sabes que para SQL unNULLno es igual a otroNULL. ¿Qué devuelve elSELECT?5. Predice la salida
En la unidad pasada, escribir
NULLy no nombrar la columna daban lo mismo, porque aquellas tablas no tenían ningúnDEFAULT. Esta sí lo tiene. Quien apunta a Tecnosur no sabe cuánto tarda, y escribe unNULLa mano endias. A Brisa la apunta sin nombrar esa columna. ¿Qué devuelve elSELECT?6. Opción múltiple
Queda 1 Monitor y alguien vende 2. Con esta tabla, llega
UPDATE almacen SET stock = stock - 2 WHERE id = 1;. ¿Qué pasa?7. Encuentra el bug
Alguien rehace la regla del stock y carga dos productos, el Monitor, con 5, y el Cable, que está agotado. Aquí SQL contesta
CHECK constraint failed: stock > 0. La fila del Cable dice la verdad. ¿Qué línea tiene el problema?8. Ordena las líneas
La tienda apunta lo que le encarga a sus proveedores. Un encargo nace
pendiente, sin que nadie tenga que escribirlo. Ordena la tabla, un encargo de Cables y elSELECTque lo enseña. Sobran dos líneas.9. Encuentra el caso que falla
pedidosse creó concantidad INTEGER NOT NULL, sin ninguna otra regla. El dueño cuenta los pedidos que ha hecho Luis, el cliente 2, que hoy son 3. ¿Con cuál de estos cambios, que la tabla acepta sin protestar, la cuenta incluye un pedido que no lo es?10. Opción múltiple
Cada proveedor tiene un número de registro. La tienda no quiere dos proveedores con el mismo número, y tampoco uno que no lo tenga. La tabla ya tiene su
id. ¿Cómo se declara esa columna?11. Escribe el código
Crea la tabla
proveedorescon todas sus reglas. Lleva cuatro columnas.idva como siempre,id INTEGER PRIMARY KEY.nombrees un texto obligatorio.correoes un texto que no se puede repetir.diases un entero que vale 7 si no se dice otra cosa, y no puede ser negativo. Para comprobarla, la app intenta meterle siete filas, y solo cuatro cumplen las reglas.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.