A lookup table beats an enum the day the list changes
A Postgres enum is fast and typed and painful to change: you can add values but not remove or reorder them, and renaming needs a migration on every consumer.
CREATE TABLE order_statuses (code text PRIMARY KEY, label text NOT NULL);
ALTER TABLE orders ADD FOREIGN KEY (status) REFERENCES order_statuses (code);Use an enum for a list that is fixed by the domain, like days of the week. For anything a product manager might rename, a table.
postgresqlschema-design