Saltar al contenido

Restricciones

SQL · Unidad 12: Diseñar tablas

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

idnombretelefono
1Andina022501234
2Tecnosur042607788

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

    Con esta tabla hecha y Andina dentro, llegan tres proveedores más, cada uno en su INSERT. ¿A cuál rechaza la base?

  2. 2. Completa el código

    Se apunta Brisa, solo con su nombre. Completa las dos reglas para que la tabla le ponga su id y no acepte a nadie sin nombre.

  3. 3. Encuentra el bug

    Se apuntan dos proveedores en un solo INSERT, Andina y Brisa. Aquí SQL contesta UNIQUE constraint failed: proveedores.correo. ¿Qué línea tiene el problema?

  4. 4. Predice la salida

    Brisa y Tecnosur todavía no han dado su correo, y se apuntan sin él. La columna correo es UNIQUE, y desde la unidad 4 sabes que para SQL un NULL no es igual a otro NULL. ¿Qué devuelve el SELECT?

  5. 5. Predice la salida

    En la unidad pasada, escribir NULL y no nombrar la columna daban lo mismo, porque aquellas tablas no tenían ningún DEFAULT. Esta sí lo tiene. Quien apunta a Tecnosur no sabe cuánto tarda, y escribe un NULL a mano en dias. A Brisa la apunta sin nombrar esa columna. ¿Qué devuelve el SELECT?

  6. 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. 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. 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 el SELECT que lo enseña. Sobran dos líneas.

  9. 9. Encuentra el caso que falla

    pedidos se creó con cantidad 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. 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. 11. Escribe el código

    Crea la tabla proveedores con todas sus reglas. Lleva cuatro columnas. id va como siempre, id INTEGER PRIMARY KEY. nombre es un texto obligatorio. correo es un texto que no se puede repetir. dias es 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.

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 →