Ejercicio: Diseñar tablas
Objetivo
Crear una tabla con claves y restricciones, comprobar que rechaza datos incorrectos y normalizar un diseño con datos repetidos.
Cómo se trabaja
Escribe las instrucciones en un archivo proveedores.sql y ejecútalas con sqlite3 prueba.db y .read proveedores.sql. Si no tienes SQLite a mano, escríbelas en papel y compáralas con la solución. Es normal tener que repetir el CREATE TABLE: si te equivocas, ejecuta DROP TABLE IF EXISTS proveedores; primero.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: orden de las palabras
Primero el nombre de la columna, luego el tipo y al final las restricciones: email TEXT NOT NULL UNIQUE.
💡 Pista 2: restringir a 0 o 1
Usa CHECK (activo IN (0, 1)), o CHECK (activo = 0 OR activo = 1).
✅ Ver una solución posible
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
CREATE TABLE proveedores (
id INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
telefono TEXT,
activo INTEGER NOT NULL DEFAULT 1 CHECK (activo IN (0, 1))
);
INSERT INTO proveedores (nombre, email)
VALUES ('Tecno Perú SAC', 'ventas@tecnoperu.example');
SELECT * FROM proveedores;
Resultado esperado del SELECT:
| id | nombre | telefono | activo | |
|---|---|---|---|---|
| 1 | Tecno Perú SAC | ventas@tecnoperu.example | NULL | 1 |
- Paso 3: la restricción
UNIQUEdeemail(SQLite:UNIQUE constraint failed: proveedores.email). - Paso 4: la restricción
CHECK(SQLite:CHECK constraint failed: activo IN (0, 1)). - Paso 5:
ALTER TABLE proveedores ADD COLUMN ciudad TEXT; - Paso 6:
clientes(id, nombre, email),productos(id, nombre, precio),ventas(id, cliente_id, fecha)ylineas_venta(venta_id, producto_id, cantidad). Así el cliente se guarda una vez y los productos de cada venta son filas, no una lista en una celda.
💡 🏁 Reto extra (opcional)
Diseña en papel la base de datos de una biblioteca: libros, socios y préstamos. Para cada tabla escribe sus columnas, su clave primaria y qué restricciones pondrías.