Noções Básicas de Design de Esquema
9 exemplos para você começar com o design de esquema - 6 básicos e 3 intermediários.
Busque em todas as páginas da documentação
9 exemplos para você começar com o design de esquema - 6 básicos e 3 intermediários.
CREATE em um banco de dados de desenvolvimento.
# Desenvolvimento local com 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 gerado pelo banco de dados.
CREATE TABLE app.accounts (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name text NOT NULL
);Identificador de negócio com constraint UNIQUE.
CREATE TABLE app.accounts (
id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
external_ref text NOT NULL UNIQUE,
name text NOT NULL
);Substantivos plurais e prefixo 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)
);Nomeie a coluna filha como parent_table_id.
ALTER TABLE app.order_lines
ADD CONSTRAINT order_lines_order_id_fkey
FOREIGN KEY (order_id) REFERENCES app.orders(id);Reduzir a ambiguidade de NULL.
CREATE TABLE app.settings (
account_id bigint PRIMARY KEY REFERENCES app.accounts(id),
theme text NOT NULL DEFAULT 'light'
);Regras de linha aplicadas pelo banco de dados.
ALTER TABLE app.order_lines
ADD CONSTRAINT order_lines_qty_positive CHECK (qty > 0);Quando o par de negócio é ú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 linhas inativas.
ALTER TABLE app.accounts ADD COLUMN deleted_at timestamptz;
CREATE INDEX accounts_active_idx ON app.accounts (id) WHERE deleted_at IS NULL;Documentação do catálogo.
COMMENT ON TABLE app.accounts IS 'Tenant billing account';
COMMENT ON COLUMN app.accounts.external_ref IS 'CRM id';psql \d+ e catálogos de dadosVersões da Stack: Esta página foi escrita para PostgreSQL 18.4 (estável 18, manutenção 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x e PostGIS 3.5+.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026