Skip to content

Tipos de datos y constraints ​

Elegir bien los tipos y restricciones evita errores antes de que lleguen a la aplicacion.

Tipos habituales ​

TipoUso
TEXTcadenas sin longitud fija
VARCHAR(n)cadenas con limite
INTEGER, BIGINTnumeros enteros
NUMERIC(p,s)importes y decimales exactos
BOOLEANverdadero/falso
DATEfecha sin hora
TIMESTAMPfecha y hora
TIMESTAMPTZfecha y hora con zona normalizada
UUIDidentificadores globales
JSONBdocumentos JSON indexables

Constraints ​

sql
CREATE TABLE usuarios (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email TEXT NOT NULL UNIQUE,
  edad INT CHECK (edad >= 0),
  activo BOOLEAN NOT NULL DEFAULT true,
  creado_en TIMESTAMPTZ NOT NULL DEFAULT now()
);

Constraints importantes:

  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • NOT NULL
  • CHECK
  • DEFAULT

Fechas ​

Para aplicaciones modernas suele ser mejor usar TIMESTAMPTZ en eventos y auditoria:

sql
created_at TIMESTAMPTZ NOT NULL DEFAULT now()

TIMESTAMP sin zona puede ser valido para datos locales como horarios de una tienda, pero hay que decidirlo conscientemente.

Dominios ​

Un dominio reutiliza una regla:

sql
CREATE DOMAIN email_text AS TEXT
CHECK (VALUE ~* '^[^@]+@[^@]+\.[^@]+$');

Buenas practicas ​

  • Usa NUMERIC para dinero.
  • Usa BIGINT si una tabla puede crecer mucho.
  • Usa UUID cuando necesites ids generados fuera de la base.
  • Declara NOT NULL en campos obligatorios.
  • Usa CHECK para reglas simples.

Errores comunes ​

  • Guardar fechas como texto.
  • Usar FLOAT para precios.
  • No limitar estados permitidos.
  • Permitir nulos en columnas esenciales.
  • Confiar toda la validacion a la aplicacion.