Lecciones del módulo (1/4)
Tipos de datos avanzados y ENUMs
En la lección anterior vimos el comando CREATE TABLE básico. Exploremos ahora algunos tipos de datos avanzados que ofrece PostgreSQL para modelar nuestros dominios de una forma más precisa y segura.
Tipos numéricos y de texto
PostgreSQL tiene varios tipos de números y texto. Elegir el correcto ayuda tanto con la validación como con el espacio de almacenamiento.
CREATE TABLE advanced_products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
description TEXT,
-- NUMERIC(p,s) dove p = cifre totali, s = cifre decimali
price NUMERIC(10, 2) NOT NULL,
featured BOOLEAN DEFAULT FALSE
);TEXTvsVARCHAR(n): En Postgres el rendimiento es idéntico. UtiliceVARCHAR(n)solo cuando desea limitar explícitamente la longitud insertada en el nivel de la base de datos.NUMERIC(10, 2): Perfecto para dinero o precisión aritmética. Aquí permite como máximo 8 dígitos enteros y 2 decimales (10 en total). Si inserta10.555, Postgres lo redondea a10.56.
El tipo de UUID
Para identificadores seguros expuestos en la web (como ID públicos en URL), a menudo se prefiere UUID al incremento clásico SERIAL.
CREATE TABLE public_orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
customer TEXT NOT NULL,
total NUMERIC(10, 2)
);ENUM (Enumeraciones)
A menudo, una columna debe contener sólo uno de unos pocos valores predefinidos (por ejemplo, estado del pedido: "nuevo", "pagado", "enviado"). Un enfoque es utilizar la palabra clave CHECK, pero PostgreSQL ofrece tipos ENUM personalizados.
-- Dobbiamo prima creare il tipo:
CREATE TYPE order_status AS ENUM ('nuovo', 'pagato', 'spedito', 'cancellato');
-- Ora possiamo usarlo in una tabella:
CREATE TABLE orders_demo (
id SERIAL PRIMARY KEY,
status order_status NOT NULL DEFAULT 'nuovo'
);Esto garantiza que nadie pueda insertar un estado no válido, protegiendo la coherencia de los datos.
Pruébalo
Cree una tabla 'user_reviews' con: id (SERIAL pk), test_id (UUID con gen_random_uuid() predeterminado), puntuación (entero no nulo) y contenido (TEXTO). Ninguno de los otros campos necesita restricciones explícitas más allá del tipo.
Mostrar pista
Escriba CREATE TABLE user_reviews (...) y luego los distintos campos. Recuerda las comas.
Solución disponible después de 3 intentos
Ejercicio de revisión
Primero cree el tipo ENUM 'user_role' con los valores 'admin' y 'user'. Luego cree la tabla 'enum_users' con id (SERIAL pk) y rol (el tipo que acaba de crear, NO NULL).
Mostrar pista
No olvides el; para separar las dos declaraciones (CREAR TIPO y CREAR TABLA).
Solución disponible después de 3 intentos