W13
Creating an enum
Description
Triggered when: A new enum was created.
Effect: Removing values from an enum requires difficult migrations, and associating more data with an enum value is difficult.
Workaround: Use a foreign key to a lookup table instead.
Detected by: eugene lint
Problematic migration
-- 1.sql
create type document_type
as enum ('invoice', 'receipt', 'other');
create table document (
id int generated always as identity
primary key,
type document_type
);
Safer migration
-- 1.sql
create table document_type(
type_name text primary key
);
insert into document_type
values('invoice'), ('receipt'), ('other');
create table document (
id int generated always as identity
primary key,
type text
references document_type(type_name)
);