SQL

CREATE TABLE with Constraints

admin by @admin ADMIN
Jun 17, 2026
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Declare data integrity rules right in the schema — primary keys, foreign keys, unique constraints, NOT NULL, CHECK constraints, defaults. The DB enforces them so application bugs can't corrupt your data.
SQL
Raw
CREATE TABLE users (
    id           BIGSERIAL PRIMARY KEY,
    email        TEXT          NOT NULL UNIQUE,
    name         TEXT          NOT NULL,
    age          INTEGER       CHECK (age IS NULL OR age >= 0),
    status       TEXT          NOT NULL DEFAULT 'active'
                               CHECK (status IN ('active', 'archived', 'banned')),
    created_at   TIMESTAMPTZ   NOT NULL DEFAULT NOW(),
    updated_at   TIMESTAMPTZ   NOT NULL DEFAULT NOW()
);

CREATE TABLE orders (
    id          BIGSERIAL PRIMARY KEY,
    user_id     BIGINT        NOT NULL,
    amount      NUMERIC(10,2) NOT NULL CHECK (amount > 0),
    currency    CHAR(3)       NOT NULL DEFAULT 'USD',
    status      TEXT          NOT NULL DEFAULT 'pending',
    created_at  TIMESTAMPTZ   NOT NULL DEFAULT NOW(),

    CONSTRAINT fk_orders_user
        FOREIGN KEY (user_id) REFERENCES users(id)
        ON DELETE CASCADE,      -- delete orders when user is deleted

    -- Composite UNIQUE — at most one "primary" order per user
    CONSTRAINT uq_user_primary UNIQUE (user_id, status)
        DEFERRABLE INITIALLY DEFERRED
);

CREATE INDEX idx_orders_user_created ON orders (user_id, created_at DESC);
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.