create table boolean ( id integer primary key, name text not null unique ) insert into boolean (name) values ('true'); insert into boolean (name) values ('false'); create table document ( id integer primary key, name text not null unique, body text not null, is_archived not null integer, foreign key (is_archived) references boolean (id) on delete cascade on update no action );

Solved.

Bonus: DBAs hate this one weird trick that can free up incredible amounts of disk space by deleting just two rows.

That on delete cascade is evil. I love it.