Conceptos básicos de diseño de esquemas
9 ejemplos para empezar con el diseño de esquemas: 6 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con el diseño de esquemas: 6 básicos y 3 intermedios.
CREATE en una base de datos de desarrollo.
# Desarrollo local con Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresID opaco generado por la base de datos.
CREATE TABLE app.accounts (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL
);Identificador de negocio con restricción UNIQUE.
CREATE TABLE app.accounts (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
external_ref text NOT NULL UNIQUE,
name text NOT NULL
);Sustantivos plurales y prefijo de esquema.
CREATE TABLE app.order_lines (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
order_id bigint NOT NULL,
sku text NOT NULL,
qty int NOT NULL CHECK (qty > 0)
);Nombra la columna hija parent_table_id.
ALTER TABLE app.order_lines
ADD CONSTRAINT order_lines_order_id_fkey
FOREIGN KEY (order_id) REFERENCES app.orders(id);Reduce la ambigüedad de NULL.
CREATE TABLE app.settings (
account_id bigint PRIMARY KEY REFERENCES app.accounts(id),
theme text NOT NULL DEFAULT 'light'
);Reglas de fila aplicadas por la base de datos.
ALTER TABLE app.order_lines
ADD CONSTRAINT order_lines_qty_positive CHECK (qty > 0);Cuando el par de negocio es único.
CREATE TABLE app.region_codes (
country char(2) NOT NULL,
region_code text NOT NULL,
name text NOT NULL,
PRIMARY KEY (country, region_code)
);deleted_at marca las filas inactivas.
ALTER TABLE app.accounts ADD COLUMN deleted_at timestamptz;
CREATE INDEX accounts_active_idx ON app.accounts (id) WHERE deleted_at IS NULL;Documentación del catálogo.
COMMENT ON TABLE app.accounts IS 'Tenant billing account';
COMMENT ON COLUMN app.accounts.external_ref IS 'CRM id';Versiones de la pila: Esta página se escribió para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.
Revisado por Chris St. John·Última actualización: 16 jul 2026